使用fgets從已發送的2個不同管道中讀取2個不同的消息,因此應該返回2個不同的消息。我有兩個管道,並關閉不需要的孩子結束,我所有的fprintfs都被刷新,但他們都返回相同的消息,然後它只是掛起。我不知道爲什麼。調試沒有幫助我,雖然我可能錯過了一些東西。使用fgets()從不同的管道讀取,從兩個讀取相同的消息(應該是不同的)
int reader(FILE *output, int **pipes, char *getMessage) {
if(output == NULL) {
fprintf(stderr, "Player quit\n");
}
fgets(getMessage, sizeof(getMessage), output);
printf("mes %s\n", getMessage);
return 0;
}
是我的讀者的方法(我用兩個相同的緩衝區,但我是用memset嘗試每次清除:
printf("test%c\n", roundDeck[deckPos]);
fprintf(input[pickturn], "yourturn %c\n", roundDeck[deckPos]);
fprintf(stdout, "yourturn %c\n", roundDeck[deckPos]);
fflush(input[pickturn]);
allHeldCards[pickturn][1] = roundDeck[deckPos];
roundDeck[deckPos] = '-';
//fclose(inPut);
deckPos++;
if(deckPos == 16) {
deckPos = 0;
}
printf("pt %d\n", pickturn);
reader(output[pickturn], pipes, getMessage);
if(msgProcess(pickturn, allIds, allFlags, allHeldCards,
getMessage, pipes, roundDeck,
deckPos, numPlayers, input) == 1) {
roundDeck[deckPos] = '-';
deckPos++;
if(deckPos == 16) {
deckPos = 0;
}
}
memset(getMessage, 0, 50);
的投入正在發生變化,其中他們需要在外面做,所以也許我使用memset不正確?
你將不得不發佈一些代碼來重現問題看到了更多的完整方案。 – 2014-10-03 00:30:33
可能您正在爲這兩個消息使用相同的緩衝區。 – 2014-10-03 00:31:39
無法調試我們看不到的代碼。 – 2014-10-03 00:43:31