xcm@u32:~/test$ cat t1.c
- #include <stdio.h>
-
#include <unistd.h>
-
#include <stdlib.h>
-
#include <sys/wait.h>
-
int main(void)
-
{
-
int pid;
-
pid = fork();
-
if(pid == 0) {
-
printf("child\n");
-
execlp("ls", NULL, (char *)0);
-
} else {
-
wait(0);
-
printf("parent!\n");
-
}
- return 0;
-
}
xcm@u32:~/test$ ./a.out |more
parent!
xcm@u32:~/test$ ./a.out
child
parent!
如果不用more,那么标准输出是终端,缓存模式默认为行缓存,在执行exec之前就会write到标准输出了
当用more时,标准输出是管道,不是终端,全缓存,exec的时候待打印的东西还在buffer中,exec之后就没有了
此时在exec前加fflush(stdout)也可行,或者在printf前加setvbuf 修改缓存也可以
exec一般用的较少,刷缓存(特别是标准输出) 和关fd(最好是设置exec自动关闭标志)比较重要
阅读(3361) | 评论(0) | 转发(0) |