Execv-Linux-printf不';行不通

Execv-Linux-printf不';行不通,c,linux,execv,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(“hello\n”) 不起作用?即使我

我正在尝试使用以下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(“hello\n”)
不起作用?即使我设置了sleep?

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

调用
fflush(stdout)execlp()
之前执行code>,问题应该得到解决。你不需要睡觉,它对输出没有影响

#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;
 }
#包括
#包括
int main(int argc,char*argv[])
{
printf(“你好。\n”);
fflush(stdout);
如果(execlp(“ls”,“ls”,“-l”,NULL)=-1)
printf(“执行ls时出错。\n”);
返回0;
}

这对我来说很好。测试时是否重定向了输出?我在终端中执行。ls工作正常,但没有“你好”printed@ILyaShapira你可以接受答案,如果它解决了你的问题。我不能,因为我没有15个声誉你不需要任何声誉来接受你自己问题的答案,你只需要代表投票。单击答案旁边的复选标记。