繁体   English   中英

Execv Linux printf不起作用

[英]Execv Linux printf doesn't work

我正在尝试使用以下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”)不起作用? 即使我入睡?

当输出到终端时,程序应该可以工作,但是如果将输出重定向到文件或管道,则程序将无法正常工作。 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;
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM