ファイルにデータを書き込みます。Writes data to a file.


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


データを書き込むファイルのファイル記述子。File descriptor of file into which data is written.

書き込むデータ。Data to be written.

バイト数。Number of bytes.

戻り値Return Value

成功した場合、 _writeは書き込まれたバイト数を返します。If successful, _write returns the number of bytes written. ディスク上に残っている実際の領域が、関数がディスクに書き込もうとしているバッファーのサイズよりも小さい場合、 _writeは失敗し、バッファーの内容はディスクにフラッシュされません。If the actual space remaining on the disk is less than the size of the buffer the function is trying to write to the disk, _write fails and does not flush any of the buffer's contents to the disk. 戻り値-1 はエラーを示します。A return value of -1 indicates an error. 無効なパラメーターが渡されると、「パラメーターの検証」で説明されているように、この関数は無効なパラメーター ハンドラーを呼び出します。If invalid parameters are passed, this function invokes the invalid parameter handler, as described in Parameter Validation. 実行の継続が許可された場合、この関数は-1 を返し、 errnoは3つの値のいずれかに設定されます。これは、ファイル記述子が無効であるか、ファイルが書き込み用に開かれていないことを意味します。ENOSPC。これは、操作に必要な領域がデバイスに残っていないことを意味します。またはEINVALバッファーが null ポインターであるか、または奇数のバイト数がUnicode モードでファイルに書き込まれるように渡されたことを示します。If execution is allowed to continue, the function returns -1 and errno is set to one of three values: EBADF, which means the file descriptor is invalid or the file is not opened for writing; ENOSPC, which means there is not enough space left on the device for the operation; or EINVAL, which means that buffer was a null pointer or that an odd count of bytes was passed to be written to a file in Unicode mode.

これらのリターン コードとその他のリターン コードの詳細については、「errno、_doserrno、_sys_errlist、および _sys_nerr」を参照してください。For more information about these and other return codes, see errno, _doserrno, _sys_errlist, and _sys_nerr.

ファイルがテキストモードで開かれている場合、各ラインフィード文字は出力のキャリッジリターンラインフィードのペアで置き換えられます。If the file is opened in text mode, each line feed character is replaced with a carriage return-line feed pair in the output. 置換は戻り値には影響しません。The replacement doesn't affect the return value.

ファイルが Unicode 変換モードで開かれている場合 (たとえば、 fd_openまたは _sopenを使用して開かれ、 _O_WTEXTを含むモードパラメーターを使用して起動された場合)。 _O_U16TEXT、または _O_U8TEXTfopenを使用して開いた場合、または、 ccs = unicodeccs = 16LE、またはccs = utf-8を含むモードパラメーターを使用して開かれている場合、またはモードが _setmodeを使用して unicode 変換モードに変更された場合、バッファーwchar_t utf-16データを含むの配列へのポインターとして解釈さWhen the file is opened in Unicode translation mode—for example, if fd is opened by using _open or _sopen and a mode parameter that includes _O_WTEXT, _O_U16TEXT, or _O_U8TEXT, or if it's opened by using fopen and a mode parameter that includes ccs=UNICODE, ccs=UTF-16LE, or ccs=UTF-8, or if the mode is changed to a Unicode translation mode by using _setmodebuffer is interpreted as a pointer to an array of wchar_t that contains UTF-16 data. このモードで奇数バイトの書き込みを試みると、パラメーター検証エラーが発生します。An attempt to write an odd number of bytes in this mode causes a parameter validation error.


_Write関数は、バッファーのバイトfdに関連付けられたファイルに書き込みます。The _write function writes count bytes from buffer into the file associated with fd. 書き込み操作は、指定されたファイルに関連付けられたファイル ポインター (存在する場合) の現在の位置で開始されます。The write operation begins at the current position of the file pointer (if any) associated with the given file. ファイルが追加用に開かれている場合、操作はファイルの現在の末尾で開始されます。If the file is open for appending, the operation begins at the current end of the file. 書き込み操作の後、ファイルポインターは、書き込まれたバイト数だけ増加します。After the write operation, the file pointer is increased by the number of bytes written.

テキストモードで開かれたファイルに書き込む場合、 _writeは CTRL + Z 文字をファイルの論理終端として扱います。When writing to files opened in text mode, _write treats a CTRL+Z character as the logical end of file. デバイスに書き込む場合、 _writeはバッファー内の CTRL + Z 文字を出力ターミネータとして扱います。When writing to a device, _write treats a CTRL+Z character in the buffer as an output terminator.

既定では、この関数のグローバル状態はアプリケーションにスコープが設定されています。By default, this function's global state is scoped to the application. これを変更するには、「 CRT でのグローバル状態」を参照してください。To change this, see Global state in the CRT.


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

互換性の詳細については、「互換性」を参照してください。For additional compatibility information, see 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 )
         case EBADF:
            perror("Bad file descriptor!");
         case ENOSPC:
            perror("No space left on device!");
         case EINVAL:
            perror("Invalid parameter: buffer was NULL!");
            // An unrelated error occurred
            perror("Unexpected error!");
      printf_s( "Wrote %u bytes to file.\n", bytesWritten );
   _close( fileHandle );
Wrote 36 bytes to file.

関連項目See also

低レベル i/oLow-Level I/O
_open、_wopen_open, _wopen