Aracılığıyla paylaş


_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; ENOSPCbu, cihazda işlem EINVALiç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_errlistve _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_U8TEXTveya içeren _O_WTEXTbir mod parametresi kullanılarak _open açıldıysa veya kullanılarak ve , veya içeren ccs=UTF-16LEccs=UNICODEbir mod parametresi kullanılarak fopen açıldıysa ya da ccs=UTF-8mod kullanılarak _setmodeUnicode ç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 fdiliş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.

Alt düzey G/Ç
fwrite
_open, _wopen
_read
_setmode