-2
我试图用三个子文件写入简单的FIFO程序,它向文件发送值,父文件读取此文件。我的问题是,cfp = fopen(fifoName,“w”);应该earse文件并保存新的值,所以我认为输出应该看起来像“这是家长。从fifo上的孩子收到的值30”,但我的输出是“这是父母。收到价值2010从FIFO的孩子“。感谢您的帮助。在UNIX中创建FIFO
什么是错在我的代码?
int main()
{
int ret;
int p1, p2, p3, p4;
int value;
char fifoName[] = "/tmp/testfifo20";
char errMsg[1000];
FILE *cfp;
FILE *pfp;
int x1;
int x2, x3, x4;
ret = mknod(fifoName, S_IFIFO | 0600, 0);
if (ret < 0)
{
sprintf(errMsg, "Unable to create fifo: %s", fifoName);
errexit(errMsg);
}
if ((p3 = fork()) == 0)
{
x1 = 10;
cfp = fopen(fifoName, "w");
if (cfp == NULL)
errexit("Unable to open fifo for writing");
ret = fprintf(cfp, "%d", x1);
fflush(cfp);
exit(0);
}
if ((p2 = fork()) == 0)
{
x2 = 20;
cfp = fopen(fifoName, "w");
if (cfp == NULL)
errexit("Unable to open fifo for writing");
ret = fprintf(cfp, "%d", x2);
fflush(cfp);
exit(0);
}
if ((p3 = fork()) == 0)
{
x3 = 30;
cfp = fopen(fifoName, "w");
if (cfp == NULL)
errexit("Unable to open fifo for writing");
ret = fprintf(cfp, "%d", x3);
fflush(cfp);
exit(0);
}
else
{
pfp = fopen(fifoName, "r");
if (pfp == NULL)
errexit("Unable to open fifo for reading");
ret = fscanf(pfp, "%d", &value);
if (ret < 0)
errexit("Error reading from named pipe");
fclose(pfp);
printf("This is the parent. Received value %d from child on fifo \n",
value);
unlink(fifoName);
exit(0);
}
}
“* i'm试图用三个子文件写入简单的FIFO程序,它向文件和父文件发送值*”简单? – alk
我想知道关于downvotes。一个非常有趣的问题,带有代码,具有预期的和实际的输出。代码甚至写得很好,还有各种错误检查。我不知所措 – SzG