Execv Linux printf不起作用

时间:2016-05-31 20:00:11

标签: c linux execv

我尝试使用此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") 不工作?即使我睡觉了?

1 个答案:

答案 0 :(得分:2)

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

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

#include <stdio.h>
#include <unistd.h>

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;
 }