_write

ファイルにデータを書き込みます。

構文

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

パラメーター

fd
データを書き込むファイルのファイル記述子。

buffer
書き込むデータ。

count
バイト数。

戻り値

成功した場合は、 _write 書き込まれたバイト数を返します。 ディスク上に残っている実際の領域が、この関数がディスクに書き込もうとしているバッファーのサイズよりも小さい場合、_write は失敗し、バッファーのコンテンツはディスクにフラッシュされません。 戻り値 -1 はエラーを示します。 無効なパラメーターが渡された場合、「パラメーターの検証」で説明されているように、この関数は無効なパラメーター ハンドラーを呼び出します。 実行の続行が許可されている場合、関数は -1 を返しerrno、3 つの値EBADFのいずれかに設定されます。つまり、ファイル記述子が無効であるか、ファイルが書き込みENOSPC用に開かれない、つまり、操作EINVAL用の十分な領域がデバイスに残っていないか、null ポインターであったか、奇数countバイトが Unicode モードで渡されたことを意味bufferします。

これらのリターン コードとその他のリターン コードについては、「errno_doserrno_sys_errlist_sys_nerr」を参照してください。

ファイルがテキスト モードで開かれた場合、各ライン フィード文字は出力ではキャリッジ リターンとライン フィードのペアで置き換えられます。 この置き換えは、戻り値には影響しません。

ファイルが Unicode 変換モードで開かれた場合 (たとえば、_open または _sopen と、_O_WTEXT_O_U16TEXT、または _O_U8TEXT を含むモード パラメーターを使用することで fd が開かれた場合や、fopenccs=UNICODEccs=UTF-16LE、または ccs=UTF-8 を含むモード パラメーターを使用して開かれた場合や、_setmode を使用してモードが Unicode 変換モードに変更された場合など)、bufferUTF-16 データを含む wchar_t の配列へのポインターとして解釈されます。 このモードで奇数バイトの書き込みを試みると、パラメーター検証エラーが発生します。

解説

_write 関数は、count のバイトを buffer から fd に関連付けられたファイルにコピーします。 書き込み操作は、指定されたファイルに関連付けられたファイル ポインター (存在する場合) の現在の位置で開始されます。 ファイルが追加用に開かれている場合、操作はファイルの現在の末尾で開始されます。 書き込み操作の後、ファイル ポインターは書き込まれたバイト数の分、増加します。

テキスト モードで開かれたファイルに書き込むときは、 _write Ctrl + Z 文字をファイルの論理末尾として扱います。 デバイスに書き込むときに、 _write バッファー内の Ctrl + Z 文字を出力ターミネータとして扱います。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください

必要条件

ルーチンによって返される値 必須ヘッダー
_write <io.h>

互換性の詳細については、「 Compatibility」を参照してください。

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