使用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