gpt4 book ai didi

c - 在 C 中从管道写入和读取整数

转载 作者:行者123 更新时间:2023-11-30 18:02:28 25 4
gpt4 key购买 nike

我试图理解 C 中管道的使用,特别是写入和读取整数。我有一个创建 3 个子进程的父进程。其中两个子进程计算数字并将其写入管道。第三个进程从两个管道读取然后显示。听起来很简单吧?

我找到了这篇文章:How to send integer with pipe between two processes!关于如何通过管道发送整数并遵循它,但我没有产生正确的输出。

编辑:为了进一步说明,我像这样启动管道:

int p1[2]; //pipe1 
int p2[2]; //pipe2
pipe(p1); //intialize pipe1 for between process 1 & 3
pipe(p2); //initialize pipe2 for between process 2 & 3

经过一些调试,我注意到错误的数字被写入管道。这就是我向管道写入 int 的方式:

int c0 = 18;
write(p2[1], &c0, sizeof(c0));

这就是我正在阅读的方式:

int disp[4];
read(p1[0], &disp[0], sizeof(disp[0]));

依此类推,直到数组已满。

现在,它不再向管道写入 14 之类的内容,而是写入 17462 之类的大数字。我假设它正在写入地址,对吧?如果是这样,我将如何将实际整数写入管道?我是否应该从语句中删除“&”,因为这样做会给我带来关于转换的错误。任何提示、建议、评论都将受到赞赏。谢谢。

最佳答案

您可能需要在管道上获得写锁。

如果进程 1 和进程 2 同时写入管道,则可能会在管道中混合字节,从而导致读取结果将是一些您从未见过的奇怪数字。

关于c - 在 C 中从管道写入和读取整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9181122/

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