_write
更新 : 2007 年 11 月
ファイルにデータを書き込みます。
int _write(
int fd,
const void *buffer,
unsigned int count
);
パラメータ
fd
データを書き込むファイルのファイル記述子。buffer
書き込むデータ。count
バイト数。
戻り値
処理が正常に終了すると、_write 関数は実際に書き込まれたバイト数を返します。ディスクの実際の空き容量が、ディスクに書き込むバッファのサイズよりも小さい場合、_write 関数は失敗し、ディスクへの書き込みは行われません。戻り値 -1 はエラーを意味します。無効なパラメータが渡される場合、「パラメータの検証」に説明されているように、この関数は無効なパラメータ ハンドラを呼び出します。実行の継続が許可された場合、関数は -1 を返し、errno は次の 3 つの値のいずれかに設定されます。EBADF は、ファイル記述子が無効であるかファイルが書き込み用に開かれていないことを示します。ENOSPC は、操作を行うにはデバイスの空き領域が不足していることを示します。EINVAL は、buffer が null ポインタであったことを示します。
戻り値の詳細については、「_doserrno、errno、_sys_errlist、および _sys_nerr」を参照してください。
ファイルがテキスト モードで開かれていると、各改行文字が、出力時に復帰と改行のペアで置き換えられます。この置き換えは、戻り値には影響しません。
解説
_write 関数は、count のバイト数のデータを buffer から fd に関連付けられたファイルに書き込みます。書き込み操作は、指定のファイルに関連付けられたファイル ポインタがある場合は、そのポインタの現在位置から開始します。ファイルが追加のために開かれている場合は、現在のファイルの終端から開始します。書き込み操作の後で、実際に書き込まれたバイト数だけ、ファイル ポインタが増分します。
テキスト モードで開かれているファイルに書き込む場合、_write 関数は Ctrl + Z 文字を論理的な EOF (EOF: end-of-file) と見なします。デバイスに書き込む場合、_write 関数はバッファ内の Ctrl + Z 文字を出力の終端記号と見なします。
必要条件
ルーチン |
必須ヘッダー |
---|---|
_write |
<io.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// 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 );
}
Wrote 36 bytes to file.