WRITE
Section: Linux Programmer's Manual (2)
Updated: 13 January 1996
Index
NAME
write -在一个文件描述符上执行写操作
概述
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
描述
write
向文件描述符
fd
所引用的文件中写入
从
buf
开始的缓冲区中
count
字节的数据.
POSIX规定,当使用了write()之后再使用
read(),那么读取到的应该是更新后的数据.
但请注意并不是所有的文件系统都是
POSIX兼容的.
返回值
成功时返回所写入的字节数(若为零则表示没有写入数据).
错误时返回-1,并置errno为相应值.
若count为零,对于普通文件无任何影响,但对特殊文件
将产生不可预料的后果.
错误代码
- EBADF
-
fd
不是一个合法的文件描述符或者没有以写方式打开.
- EINVAL
-
fd
所指向的对象不可写.
- EFAULT
-
buf
不在用户可访问地址空间内.
- EPIPE
-
fd
连接到一个管道,或者套接字的读方向一端已关闭.此时写进程
将接收到
SIGPIPE
信号;如果此信号被捕获,阻塞或忽略,那么将返回错误
EPIPE.
- EAGAIN
-
读操作阻塞,但使用
O_NONBLOCK
指定了非阻塞式输入输出.
- EINTR
-
在写数据以前调用被信号中断.
- ENOSPC
-
fd
指向的文件所在的设备无可用空间.
- EIO
-
当编辑一个节点时发生了底层输入输出错误.
可能发生了其他错误,取决于
fd
所连接的对象.
兼容于
SVr4, SVID, POSIX, X/OPEN, 4.3BSD.
SVr4文档添加了以下错误代码:
EDEADLK, EFBIG, ENOLCK, ENOLNK, ENOSR,
ENXIO, EPIPE,或者ERANGE.
对于SVr4有可能在写入部分数据时发生中断并返回EINTR.