_write
将数据写入文件。
语法
int _write(
int fd,
const void *buffer,
unsigned int count
);
参数
fd
可向其中写入数据的文件的文件描述符。
buffer
要写入的数据。
count
字节数。
返回值
如果成功,_write
将返回写入的字节数。 如果磁盘上剩余的实际空间小于函数尝试写入到磁盘的缓冲区的大小,则 _write
将失败,并且无法将缓冲区中的任何内容刷新到磁盘中。 返回值 -1 指示错误。 如果传递的参数无效,则此函数将调用无效参数处理程序,如参数验证中所述。 如果允许执行继续,则该函数将返回 -1 并将 errno
设置为以下三个值之一:EBADF
,该值表示文件描述符无效或文件未处于打开状态以供写入;ENOSPC
,该值表示设备上的剩余空间不足,无法进行操作;或 EINVAL
,该值表示 buffer
是空指针或已在 Unicode 模式下传递 count
个奇数字节。
有关这些和其他的返回代码的详细信息,请参阅 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> |
有关兼容性的详细信息,请参阅 兼容性。
示例
// 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.