_write
Bir dosyaya veri yazar.
Sözdizimi
int _write(
int fd,
const void *buffer,
unsigned int count
);
Parametreler
fd
Verilerin yazıldığı dosyanın dosya tanımlayıcısı.
buffer
Yazılacak veriler.
count
Bayt sayısı.
Dönüş değeri
Başarılı olursa, _write
yazılan bayt sayısını döndürür. Diskte kalan gerçek alan, işlevin diske yazmaya çalıştığı arabelleğin boyutundan küçükse, _write
başarısız olur ve arabelleğin içeriğini diske boşaltmaz. -1 dönüş değeri bir hatayı gösterir. Geçersiz parametreler geçirilirse, bu işlev Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisini çağırır. Yürütmenin devam etmesi için izin verilirse, işlev -1 döndürür ve errno
şu üç değerden birine ayarlanır: EBADF
, dosya tanımlayıcısının geçersiz olduğu veya dosya yazma için açılmadığı anlamına gelir; ENOSPC
bu, cihazda işlem EINVAL
için yeterli alan kalmadığı veya bunun null işaretçi olduğu buffer
veya Unicode modunda tek count
bayt geçirildiği anlamına gelir.
Bunlar ve diğer iade kodları hakkında daha fazla bilgi için bkz. errno
, _doserrno
, _sys_errlist
ve _sys_nerr
.
Dosya metin modunda açılırsa, her satır besleme karakteri çıkıştaki satır başı satır besleme çiftiyle değiştirilir. Değiştirme, dönüş değerini etkilemez.
Dosya Unicode çeviri modunda açıldığında (örneğin, fd
veya kullanılarak ve , _O_U16TEXT
_O_U8TEXT
veya içeren _O_WTEXT
bir mod parametresi kullanılarak _open
açıldıysa veya kullanılarak ve , veya içeren ccs=UTF-16LE
ccs=UNICODE
bir mod parametresi kullanılarak fopen
açıldıysa ya da ccs=UTF-8
mod kullanılarak _setmode
Unicode çeviri moduna değiştirildiyse)buffer
veri içeren UTF-16
bir diziye wchar_t
işaretçi olarak yorumlanır_sopen
. Bu modda tek sayıda bayt yazma girişimi parametre doğrulama hatasına neden olur.
Açıklamalar
_write
işlevi ile fd
ilişkilendirilmiş dosyaya bayt buffer
yazarcount
. Yazma işlemi, belirtilen dosyayla ilişkili dosya işaretçisinin (varsa) geçerli konumunda başlar. Dosya ekleme için açıksa, işlem dosyanın geçerli sonunda başlar. Yazma işleminden sonra, dosya işaretçisi yazılan bayt sayısına göre artırılır.
Metin modunda açılan dosyalara yazdığında, _write
CTRL+Z karakterlerini dosyanın mantıksal ucu olarak ele alır. Bir cihaza yazdığında, _write
arabellekteki bir CTRL+Z karakterini çıkış sonlandırıcısı olarak ele alır.
Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.
Gereksinimler
Yordam | Gerekli başlık |
---|---|
_write |
<io.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// crt__write.c
//
// This program opens a file for output and uses _write to write
// some bytes to the file.
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <share.h>
char buffer[] = "This is a test of '_write' function";
int main( void )
{
int fileHandle = 0;
unsigned bytesWritten = 0;
if ( _sopen_s(&fileHandle, "write.o", _O_RDWR | _O_CREAT,
_SH_DENYNO, _S_IREAD | _S_IWRITE) )
return -1;
if (( bytesWritten = _write( fileHandle, buffer, sizeof( buffer ))) == -1 )
{
switch(errno)
{
case EBADF:
perror("Bad file descriptor!");
break;
case ENOSPC:
perror("No space left on device!");
break;
case EINVAL:
perror("Invalid parameter: buffer was NULL!");
break;
default:
// An unrelated error occurred
perror("Unexpected error!");
}
}
else
{
printf_s( "Wrote %u bytes to file.\n", bytesWritten );
}
_close( fileHandle );
}
Wrote 36 bytes to file.
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin