_write

將資料寫入檔案。

語法

int _write(
   int fd,
   const void *buffer,
   unsigned int count
);

參數

fd
資料要寫入至其中之檔案的檔案描述項。

buffer
要寫入的資料。

count
位元組數。

傳回值

如果成功, _write 則傳回寫入的位元組數目。 如果磁片上剩餘的實際空間小於函式嘗試寫入磁片的緩衝區大小, _write 則會失敗,而且不會排清任何緩衝區的內容至磁片。 -1 的傳回值表示錯誤。 如果傳遞了不正確參數,此函式會叫用不正確參數處理常式,如參數驗證 中所述 。 如果允許繼續執行,則函式會傳回 -1,並 errno 設定為三個值的其中一個: EBADF ,這表示檔案描述元無效,或檔案無法開啟以進行寫入 ENOSPC ;這表示裝置上沒有足夠的空間可供作業使用;或 EINVAL ,這表示 buffer 為 Null 指標,或是在 Unicode 模式中傳遞位元組的奇數 count

如需這些傳回碼和其他傳回碼的詳細資訊,請參閱 errno_sys_errlist_doserrno_sys_nerr

如果檔案以文字模式開啟,則輸出中的每個換行字元會取代為歸位字元換行字元組。 取代不會影響傳回值。

當檔案以 Unicode 轉譯模式開啟時,例如,如果使用 fd 或 和 _sopen 包含 、 _O_U16TEXT_O_U8TEXT 的 mode 參數開啟 _open ,或是使用 fopen 開啟,以及包含 、 ccs=UTF-16LEccs=UTF-8 的 mode 參數 _O_WTEXTccs=UNICODE ,或是模式使用 _setmode 變更為 Unicode 轉譯模式, buffer 則會解譯為包含 UTF-16 資料的陣列 wchar_t 指標。 嘗試以此模式寫入奇數位元組會導致參數驗證錯誤。

備註

_write 函式會將 count 個位元組從 buffer 寫入至與 fd 相關的檔案。 寫入作業會從與指定檔案相關之檔案指標 (若有的話) 的目前位置開始。 若檔案是開啟為以供附加,則作業會在檔案的目前結尾開始。 寫入作業之後,檔案指標會隨著寫入的位元組數目而增加。

當寫入以文字模式開啟的檔案時, _write 會將 CTRL+Z 字元視為檔案的邏輯結尾。 寫入裝置時, _write 會將緩衝區中的 CTRL+Z 字元視為輸出結束字元。

根據預設,此函式的全域狀態會限定于應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。

需求

常式 必要的標頭
_write <io.h>

如需相容性詳細資訊,請參閱相容性

範例

// 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.

另請參閱

低階 I/O
fwrite
_open, _wopen
_read
_setmode