如何在c的while循环内同步处理
|
我遇到了一个难题:
我有以下程序结构:
char* input = (char *)malloc(sizeof(char));
input = \"CONTINUE\";
while(strcmp(input, \"EXIT\") != 0 )
{
printf(\"%s\", \"prompt: \");
scanf(\"%s\", input);
if( strcmp(input, \"test\") == 0 )
{
pid_t childPid;
switch(childPid = fork())
{
case -1:
printf(\"%s\", \"Error\");
break;
case 0:
foo(input);
break;
}
}
else if(/.../)
{
}
else
{
input = \"EXIT\";
}
}
void foo(char* input)
{
printf(\"%s %s\", \"printing\" input);
}
因此,问题在于,在执行循环时,它会在第一时间打印“提示:”,
然后它再次打印\“ prompt:\”,最后if语句的子进程打印其输出。
就像子进程不同步或什么一样,我无法弄清楚是什么原因导致第二次额外打印“提示:”。这是一个示例输出:
prompt: test //typed \"test\"
prompt: //Where is this comming from?
printing test
prompt: //new iteration of loop expecting input
没有找到相关结果
已邀请:
1 个回复
屑凉赦
导致将子进程创建为父级的精确副本,但也允许父级继续执行。 成功生成子代时,您的代码对父代不执行任何操作(fork返回大于0的数字,指示该子代的进程ID;该返回不由您的开关处理)。因此,父级返回while循环的开始并再次打印“提示”。 子级调用foo(fork返回0),但是此后,您的代码仅从switch语句中断。此后,子代将遵循与父代完全相同的代码路径,因此它还会打印\“ prompt \”,然后执行
。 您可能想做的事情可能是这些方面的事情:
由于您在这两个过程中都处于“ 5”状态,因此您可能想暂停父级,直到子级完成为止(使用“ 6”)。否则,“提示”很可能会在
输出之前被打印出来。在某些平台上,打印可能同时发生,从而导致字符混合或终端输出完全乱码。