gpt4 book ai didi

linux - write() 系统调用何时写入所有请求的缓冲区,而不是只进行部分写入?

转载 作者:IT王子 更新时间:2023-10-29 00:50:49 25 4
gpt4 key购买 nike

如果我指望我的 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 而不是部分写入。

关于linux - write() 系统调用何时写入所有请求的缓冲区,而不是只进行部分写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/694188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com