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