码迷,mamicode.com
首页 > 其他好文 > 详细

write -在一个文件描述符上执行写操作

时间:2019-06-28 15:20:47      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:err   应该   中断   bsp   非阻塞   编辑   sig   没有   size   

概述

#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. 

write -在一个文件描述符上执行写操作

标签:err   应该   中断   bsp   非阻塞   编辑   sig   没有   size   

原文地址:https://www.cnblogs.com/fanweisheng/p/11102384.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!