_write
ファイルにデータを書き込みます。
構文
int _write(
int fd,
const void *buffer,
unsigned int count
);
パラメーター
fd
データを書き込むファイルのファイル記述子。
buffer
書き込むデータ。
count
バイト数。
戻り値
成功した場合、 _write
は書き込まれたバイト数を返します。 ディスク上に残っている実際の領域が、この関数がディスクに書き込もうとしているバッファーのサイズよりも小さい場合、_write
は失敗し、バッファーのコンテンツはディスクにフラッシュされません。 戻り値 -1 はエラーを示します。 無効なパラメーターが渡された場合、この関数は、 Parameter 検証で説明されているように、無効なパラメーター ハンドラーを呼び出します。 実行を続行できる場合、関数は -1 を返し、 errno
は 3 つの値のいずれかに設定されます。 EBADF
。つまり、ファイル記述子が無効であるか、書き込み用にファイルが開かれないか、 ENOSPC
。つまり、デバイスに操作用の十分な領域が残っていないか、 EINVAL
。つまり、 buffer
が null ポインターであったり、奇数のバイト count
が Unicode モードで渡されたりします。
これらのリターン コードとその他のリターン コードについては、「errno
、_doserrno
、_sys_errlist
、_sys_nerr
」を参照してください。
ファイルがテキスト モードで開かれた場合、各ライン フィード文字は出力ではキャリッジ リターンとライン フィードのペアで置き換えられます。 この置き換えは、戻り値には影響しません。
ファイルが Unicode 変換モードで開かれた場合 (たとえば、_open
または _sopen
と、_O_WTEXT
、_O_U16TEXT
、または _O_U8TEXT
を含むモード パラメーターを使用することで fd
が開かれた場合や、fopen
と ccs=UNICODE
、ccs=UTF-16LE
、または ccs=UTF-8
を含むモード パラメーターを使用して開かれた場合や、_setmode
を使用してモードが Unicode 変換モードに変更された場合など)、buffer
は UTF-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.