【发布时间】:2014-10-03 00:15:06
【问题描述】:
我使用 fgets 从已发送 2 条不同消息的 2 个不同管道读取,因此应该返回 2 条不同消息。我有 2 个管道,每个管道都关闭了不需要的子端,我所有的 fprintfs 都被刷新但它们都返回相同的消息然后它就挂起。我不知道为什么。尽管我可能错过了一些东西,但调试对我没有帮助。
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?
【问题讨论】:
-
您将不得不发布一些代码来重现该问题。
-
可能您对两条消息使用相同的缓冲区。
-
无法调试我们看不到的代码。
-
为什么
reader()不使用您的任何pipes?sizeof(getMessage)显然是错误的。为什么要从名为output的文件指针中读取数据?