我遇到了一个问题,使用scanf在fork()函数创建的新进程中。scanf没有被阻塞,因此printf会一遍又一遍地调用。
以下是代码示例:
以下是代码示例:
int main(int argc,char *argv[])
{
switch(fork()) {
case 0:
while(1) {
char buffer[100];
scanf("%s",buffer);
printf("Input was %s\n",buffer);
}
}
return 0;
}
有人知道如何解决这个简单的问题吗?(代码中有一些部分缺失,我为了这个问题将代码缩小到最小程度)
fork()
时,子进程需要调用exit()
,而父进程在子进程之前不能退出。如果父进程先退出,则子进程会变成“僵尸”进程。僵尸进程很难在不重新启动计算机的情况下终止。建议在父进程中调用wait()
或waitpid()
,以便父进程在子进程之前不会退出。请记住,fork()
返回3种不同的条件,代码必须允许所有三种条件。 - user3629249%s
格式说明符调用scanf()
时,始终包括一个max characters
修饰符,以便输入不会超出输入缓冲区。这样的输入缓冲区溢出会导致未定义的行为,并可能导致段错误事件。 - user3629249