_write
Verileri bir dosyaya yazar.
int _write( int fd, const void *buffer, unsigned int count );
Parametreler
fd
İçine veriler yazılır dosyasının dosya tanımlayıcısı.buffer
Yazılacak veriler.count
Bayt sayısı.
Dönüş Değeri
Başarılı olursa, _write gerçekten yazılan bayt sayısını döndürür.Diskte kalan gerçek alan işlev diske yazmak için çalışıyor arabellek boyutunu küçükse _write başarısız olur ve herhangi bir arabellek içeriği için disk temizleme değil.-1 dönüş değeri bir hata gösterir.Geçersiz parametreler iletilirse, bu işlev, geçersiz bir parametre işleyici açıklandığı gibi çağırır Parametre Doğrulama.Devam etmek için yürütme izin verildiyse, işlev-1 değerini döndürür ve errno üç değerden biri ayarlanır: EBADF, yani dosya tanımlayıcısı geçersiz veya dosya yazma için; açık değil ENOSPC, aygıttaki; işlemi için yeterli alan yok anlamına gelir sol veya EINVAL, yani buffer null bir işaretçi veya, bir tek count Unicode modda bir dosyaya yazılacak bayt sayısı geçirildi.
Bu ve diğer dönüş kodları hakkında daha fazla bilgi için bkz: errno, _doserrno, _sys_errlist, and _sys_nerr.
Dosya metin modunda açıldıysa, her satır besleme karakter bir satır başı – satır besleme çifti çıktı ile değiştirilir.Değiştirme dönüş değeri etkilemez.
Dosya açıldığında Unicode çeviri modda — Örneğin, varsa fd kullanılarak açılır _open veya _sopen ve içeren bir mod parametresi _O_WTEXT, _O_U16TEXT, veya _O_U8TEXT, veya kullanarak açıldığında fopen ve içeren bir mod parametresi ccs=UNICODE, ccs=UTF-16LE, veya ccs=UTF-8, veya modu kullanarak bir Unicode çeviri moduna değiştirilirse _setmode—buffer bir dizi işaretçisi olarak yorumlanır wchar_t içeren UTF-16 veri.Bu modda tek sayıda bayt yazma girişimi bir parametre doğrulama hatasına neden olur.
Notlar
_write İşlev yazma count baytlar buffer ile ilişkili dosyasına fd.Belirtilen dosya ile ilişkili geçerli konumu dosya işaretçisi (varsa) yazma işlemi başlar.Dosya ekleme için açıksa, geçerli dosya sonunda işlemi başlatır.Yazma işleminden sonra dosya işaretçisi gerçekte yazılan bayt sayısı tarafından artırılır.
Metin modunda açılmış dosyaları yazılırken _write CTRL + Z karakter mantıksal bitiş dosya değerlendirir.Bir aygıt için yazılırken _write CTRL + Z karakter arabellekteki çıkış Sonlandırıcı olarak değerlendirir.
Gereksinimler
Yordam |
Gerekli başlık |
---|---|
_write |
< io.h > |
Uyumluluk ek bilgi 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 occured
perror("Unexpected error!");
}
}
else
{
printf_s( "Wrote %u bytes to file.\n", bytesWritten );
}
_close( fileHandle );
}