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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值