从C中的管道写入和读取整数

时间:2012-02-07 17:44:46

标签: c int parent-child pipe

我试图理解在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 个答案:

答案 0 :(得分:0)

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

如果进程1和进程2同时写入管道,您可能会在管道中混合使用字节,这样得到的读数将是您从未见过的奇怪数字。