write函数返回值的思考
write函数
头⽂件:#include <unistd.h>
原型:size_t write(int fd, const void *buf, size_t nbytes);
返回值:若成功返回已写的字节数,若出错,返回-1。
其返回值通常与nbytes的值相同,否则表⽰出错,write出错的⼀个常见的原因是磁盘已经写满,或者超出了⼀个给定进程的⽂件长度限制。
对于普通⽂件,写操作从⽂件的当前偏移量开始。如果在打开⽂件时,指定了O_APPEND选项,则在每次写操作之前,将⽂件偏移量这是在⽂件的当前结尾处。在⼀次成功写⼊之后,该⽂件偏移量增实际写的字节数。
前提条件是:TCP底层封装接⼝,write函数使⽤默认的阻塞状态,向TCP底层socket写数据。
建议将write函数使⽤默认的阻塞⽅式,写数据到底层接⼝,这样即便是遇到中断,也不会出现写失败。
如果write已经传输了应⽤程序缓冲区中的部分数据,然后被中断,操作系统可以认为该系统调⽤(write写)失败,并将errno设置为EINTR;另⼀种处理⽅式是允许该系统调⽤成功返回,返回值是已经写的部分数据量。
下⾯的代码是write写操作的⼀部分:
do{
ret = write(fd, buf + len_sent, len - len_sent);
l_error = errno; //防⽌其他操作,把errno的值修改了,临时变量保存
DEBUG_MSG("write return:%d,errno:%d", len_sent, l_error);
if (ret > 0){
len_sent += ret;
}
else if (l_error == EINTR)
{
continue;
}
else
{
return -1;
}
}while(len > len_sent);
>write的返回值
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论