gpt4 book ai didi

c - 当使用 unix 管道(在 C 中)时,操作系统会平衡每个 write() 和 read() 还是平衡总字节数?

转载 作者:太空狗 更新时间:2023-10-29 15:04:49 26 4
gpt4 key购买 nike

例如,我想从子对象到父对象获取一个包含 4 个整数的数组。家长电话

read(apipe, buf, sizeof(int)*4);

child 的电话

for(int i=0; i<4;i++)
write(bpipe, &array[i], sizeof(int));

这是按照我的意图进行的(将 4 个整数传递给父级)还是父级仅获得第一个整数?

我尝试在其他地方搜索这个答案,但要么我不知道如何搜索,要么这个答案太微妙(或者另一方面看起来太明显)以至于文献无法对其进行过多研究。

编辑:为了进一步澄清,我试图编写一条由 4 部分组成的消息,并在一次 read() 中读取所有 4 部分。查看对已接受答案的评论。

最佳答案

readwrite使用字节,而不是消息。有关它们如何处理管道的详细信息,请参阅 POSIX 中的文档:

在你的代码中,我认为 read 应该总是得到 4 个整数,因为:

Upon successful completion, where nbyte is greater than 0, read() shall mark for update the last data access timestamp of the file, and shall return the number of bytes read. This number shall never be greater than nbyte. The value returned may be less than nbyte if the number of bytes left in the file is less than nbyte, if the read() request was interrupted by a signal, or if the file is a pipe or FIFO or special file and has fewer than nbyte bytes immediately available for reading. For example, a read() from a file associated with a terminal may return one typed line of data.

总会有 4 个整数可供读取,因为 4*sizeof(int) < PIPE_BUF因此这种大小的写入是原子的。

read 的津贴是可能的在被信号中断时返回短读取可能会起作用,但当有足够多的字节立即可用时,这不应该发生(至少在现实世界中)。

关于c - 当使用 unix 管道(在 C 中)时,操作系统会平衡每个 write() 和 read() 还是平衡总字节数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7630675/

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