_write
将数据写入文件。
int _write( int fd, const void *buffer, unsigned int count );
参数
fd
可向其中写入数据的文件的文件描述符。buffer
要写入的数据。count
字节数。
返回值
如果成功,则 _write 将返回实际写入的字节数。 如果磁盘上剩余的实际空间小于函数尝试写入到磁盘的缓冲区的大小,则 _write 将失败,并且无法将缓冲区中的任何内容刷新到磁盘中。 返回值 –1 指示错误。 如果传递的参数无效,则此函数将调用的参数处理程序也无效,如参数验证中所述。 如果允许执行继续,则该函数将返回 -1 并将 errno 设置为以下三个值之一:EBADF,该值表示文件描述符无效或文件未处于打开状态以供写入;ENOSPC,该值表示设备上的剩余空间不足,无法进行操作;或 EINVAL,该值表示 buffer 是空指针或已传递 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 字符视为输出终止符。
要求
例程 |
必需的标头 |
---|---|
_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 occured
perror("Unexpected error!");
}
}
else
{
printf_s( "Wrote %u bytes to file.\n", bytesWritten );
}
_close( fileHandle );
}