如果我指望我的write()系统调用写入例如100字节,我总是将该write()调用放在一个循环中,该循环检查返回的长度是否是我预期发送的长度,如果不是,它会缓冲缓冲区指针并减少写入量的长度.
所以我再次这样做了,但是现在有了StackOverflow,我可以问你们所有人是否知道我的写作时间会写出我要求的所有内容而不是给我一个部分写入?
附加评论:X-Istence的回复提醒我,我应该注意到文件描述符是阻塞的(即,不是非阻塞).我认为他建议阻塞文件描述符上的write()不会写入所有指定数据的唯一方法是write()被信号中断.这似乎至少对我有直观的意义......
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而不是部分写入.