
有如下代码 1.c:
#include <unistd.h> #include <stdio.h> #include <string.h> #include <sys/wait.h> int getcmd(char *buf, int nbuf) { memset(buf, 0, nbuf); fgets(buf, nbuf, stdin); if(buf[0] == 0) return -1; return 0; } int main(void) { static char buf[100]; int r; while(getcmd(buf, sizeof(buf)) >= 0){ printf("%s", buf); if(fork() == 0) return 0; wait(&r); } return 0; } 以及 1.txt
line1 line2 执行:
gcc 1.c ./a.out < 1.txt 输出
line1 line2 line2 求解为啥这里 line2 这一行会输出两次?其实我也在别的机器试过,发现有些机器就不会输出 2 次。
1 billlee 2017 年 7 月 8 日 使用未初始化的变量是未定义行为。 |
3 xenme 2017 年 7 月 8 日 via iPhone 应该是你 fork 后子进程执行了现实了 line2,结束之后父进程继续执行,然后又显示一行。 你可以试试 1.txt 放三行是啥效果,估计会更奇怪 |
5 msg7086 2017 年 7 月 9 日 if(fork() == 0) return 0; 这句是……啥意思? |