为什么不执行此printf语句

时间:2017-04-10 14:42:00

标签: c gcc operating-system printf

#include<stdio.h>
#include<sys/wait.h>
#include<unistd.h>
#include<stdlib.h>

int main( int argc, char *argv[] ) {
printf("Hello, to the Simulation world,\n");

int pid = fork();
if(pid < 0) {
    fprintf(stderr,"Oops something went wrong\n");
}else if (pid == 0){
    printf("I'm child, and I do all the work, \n");
    printf("This isn't printed");
    // Any printf statement over here isn't executed \\

    execvp(argv[1], argv);
} else {
    wait(&pid);
    printf("I'm Parent and I do nothing, but I will wait till my child dies.\n");
}
return 0;
}

如果没有显示printf语句,则在else下面的任何printf语句

使用的编译器:gcc版本6.3.1 20170306(GCC)

操作系统:基于Linux,

我的假设:stderr正在用自己的数据替换当前行输出,但只要输入在它自己的行中,如printf("This Line is Printed\n"),我就能看到输出。但如果我以这种方式写printf("This Line isn't Printed")

它只发生在我身上吗?或者OS的一些渲染问题。

上述程序的输出:

Output

1 个答案:

答案 0 :(得分:0)

尝试在fflush(NULL);

之前使用execvp(argv[1], argv);

来自man fflush:

  

对于输出流,fflush()强制写入所有用户空间   通过流缓冲给定输出或更新流的数据   底层写功能。