Execv Linux printf不起作用

我正在尝试使用此c代码运行可执行文件:

int main(int argc, char *argv[]) { printf("hello.\n"); sleep(2); if (execlp("ls","ls","-l",NULL) == -1) printf("Error occured during execute ls.\n"); return 0; } 

为什么printf(“你好\ n”)不起作用? 即使我睡觉了?

当输出到终端时,您的程序应该工作,但如果输出重定向到文件或管道,它将无法正常工作。 当stdout未连接到终端时,其输出完全缓冲。 在用新程序替换当前进程之前调用exec函数不会刷新缓冲区,因此任何缓冲输出都是很多。

调用fflush(stdout); 在调用execlp()之前,应该解决问题。 你不需要睡觉,它对输出没有影响。

 #include  #include  int main(int argc, char *argv[]) { printf("hello.\n"); fflush(stdout); if (execlp("ls","ls","-l",NULL) == -1) printf("Error occured during execute ls.\n"); return 0; }