[英]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.