假设父母和孩子都使用一个管道进行写入和读取的手段,当一个写入,然后只有其他读取,否则它阻止。有什么办法可以做到吗?我试着用睡眠功能来做,但由于竞争条件,它没有给出正确的输出。 这是我的代码有没有办法在Unix中使用一个管道同步C和父子?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#define MSGSIZE 16
main()
{
int i;
char *msg = "How are you?";
char inbuff[MSGSIZE];
int p[2];
pid_t ret;
pipe (p);
ret = fork();
if (ret > 0)
{
i = 0;
while (i < 10)
{
write (p[1], msg, MSGSIZE);
sleep (2);
read (p[0], inbuff, MSGSIZE);
printf ("Parent: %s\n", inbuff);
i++;
}
exit(1);
}
else
{
i = 0;
while (i < 10)
{
sleep (1);
read (p[0], inbuff, MSGSIZE);
printf ("Child: %s\n", inbuff);
write (p[1], "i am fine", strlen ("i am fine"));
i++;
}
}
exit (0);
}
管道有两端,通常;) - 也许你应该张贴一些代码,所以我们可以看到你已经尝试了什么。 –
我已经添加了代码,但所有新行都被吃掉了。我应该如何正确发布代码 – avd
@aditya,身份与4空格。在编辑区域上方有一个按钮(将鼠标悬停在其上以获取描述),该按钮会自动为所选文本执行此操作。 – Inshallah