while 循环后的代码未在我的 C 代码的分叉过程中打印
Code after while loop not printing in forked process of my C code
这里是菜鸟。代码应打印“C1:执行 ls 命令”以及执行 ls -la
命令的输出。但我也没有看到。不过,循环中和之前的其他打印语句的输出工作正常。
C代码
pid_t child1_pid = print_if_err(fork(), "fork");
if (child1_pid == 0) {
printf("\nChild Process 1\n");
printf("Process ID: %d\n", getpid());
printf("Parent Process ID: %d\n", getppid());
sleep(2);
int whale = 6;
char new_whale[50];
sprintf(new_whale, "%d", whale);
setenv("WHALE", new_whale, 1);
printf("C1: %d\n", whale);
while(whale > 3) {
sleep(3);
whale = whale - 3;
sprintf(new_whale, "%d", whale);
setenv("WHALE", new_whale, 1);
printf("C1: %d\n", whale);
}
print_if_err(chdir("/"), "chdir");
printf("C1: executing ls command");
execl("ls", "-l", "-a", NULL);
_exit(0);
}
可能在执行 execl 之前没有刷新 stdout 和 stderr。在 execl 之前尝试 fflush(stdout) 和 fflush(stderr)。
此行为的原因是打印速度很慢,而 printf() 实际上打印到一个缓冲区,该缓冲区稍后会一起刷新。
这里是菜鸟。代码应打印“C1:执行 ls 命令”以及执行 ls -la
命令的输出。但我也没有看到。不过,循环中和之前的其他打印语句的输出工作正常。
C代码
pid_t child1_pid = print_if_err(fork(), "fork");
if (child1_pid == 0) {
printf("\nChild Process 1\n");
printf("Process ID: %d\n", getpid());
printf("Parent Process ID: %d\n", getppid());
sleep(2);
int whale = 6;
char new_whale[50];
sprintf(new_whale, "%d", whale);
setenv("WHALE", new_whale, 1);
printf("C1: %d\n", whale);
while(whale > 3) {
sleep(3);
whale = whale - 3;
sprintf(new_whale, "%d", whale);
setenv("WHALE", new_whale, 1);
printf("C1: %d\n", whale);
}
print_if_err(chdir("/"), "chdir");
printf("C1: executing ls command");
execl("ls", "-l", "-a", NULL);
_exit(0);
}
可能在执行 execl 之前没有刷新 stdout 和 stderr。在 execl 之前尝试 fflush(stdout) 和 fflush(stderr)。
此行为的原因是打印速度很慢,而 printf() 实际上打印到一个缓冲区,该缓冲区稍后会一起刷新。