当前位置:  开发笔记 > 编程语言 > 正文

write()系统调用何时写入所有请求的缓冲区而不是仅执行部分写入?

如何解决《write()系统调用何时写入所有请求的缓冲区而不是仅执行部分写入?》经验,为你挑选了1个好方法。

如果我指望我的write()系统调用写入例如100字节,我总是将该write()调用放在一个循环中,该循环检查返回的长度是否是我预期发送的长度,如果不是,它会缓冲缓冲区指针并减少写入量的长度.

所以我再次这样做了,但是现在有了StackOverflow,我可以问你们所有人是否知道我的写作时间会写出我要求的所有内容而不是给我一个部分写入?

附加评论:X-Istence的回复提醒我,我应该注意到文件描述符是阻塞的(即,不是非阻塞).我认为他建议阻塞文件描述符上的write()不会写入所有指定数据的唯一方法是write()被信号中断.这似乎至少对我有直观的意义......



1> Artyom..:

write可能会返回部分写入,尤其是使用套接字上的操作或内部缓冲区已满.这么好的方法是做以下事情:

while(size > 0 && (res=write(fd,buff,size))!=size) {
    if(res<0 && errno==EINTR) 
       continue;
    if(res < 0) {
        // real error processing
        break;
    }
    size-=res;
    buf+=res;
}

永远不要接受通常发生的事情......

注意:如果是完整磁盘,您将获得ENOSPC而不是部分写入.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有