-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