gpt4 book ai didi

c - 在通过 execv 执行的子进程中使用 Scanf() 不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 08:43:55 25 4
gpt4 key购买 nike

我正在执行一个非常简单的程序,它使用 scanf 从用户那里获取整数输入。我通过 fork() 和 execv 将此程序作为子程序执行。子程序从不接受用户的输入。我们将不胜感激。

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
pid_t childpid;

if((childpid = fork()) == -1)
{
perror("fork");
exit(1);
}

if(childpid == 0)
{
execv("child",NULL);
exit(1);
}
else
{
printf("Parent process is terminating...\n");
return 0;
}
}

子代码是

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
int temp;
printf("This is Child Process. Child is going to sleep for 5 seconds\n");
sleep(5);
printf("Please enter an integer to terminate the process ");
scanf("%d",&temp);
printf("You entered %d ",temp);
printf("Child terminated");
return 0;
}

输出

[@localhost cascading]$ ./cascading 
Parent process is terminating...
[@localhost cascading]$ This is Child Process. Child is going to sleep for 5 seconds
Please enter an integer to terminate the process You entered 12435[@localhost cascading]$ ^C
[@localhost cascading]$

我在虚拟机上安装的fedora中运行代码。谢谢

最佳答案

一旦父进程结束,控制就返回给shell;和 stdin 可以关闭。

要保留 child 对 stdin 的访问权限,您可以让 parent 等到 child 完成。

所以,在你的 parent 中:

else {
printf("Parent process is terminating...\n");
wait(NULL);
return 0;
}

关于c - 在通过 execv 执行的子进程中使用 Scanf() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22423271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com