Chinaunix首页 | 论坛 | 博客
  • 博客访问: 264526
  • 博文数量: 52
  • 博客积分: 1379
  • 博客等级: 大尉
  • 技术积分: 525
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-18 17:34
文章分类

全部博文(52)

文章存档

2011年(48)

2010年(4)

分类: LINUX

2011-03-18 11:56:49

xcm@u32:~/test$ cat t1.c
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4. #include <sys/wait.h>
  5. int main(void)
  6. {
  7.     int pid;
  8.     pid = fork();
  9.     if(pid == 0) {
  10.         printf("child\n");
  11.         execlp("ls", NULL, (char *)0);
  12.     } else {
  13.         wait(0);
  14.         printf("parent!\n");
  15.     }
  16.     return 0;
  17. }

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) |
给主人留下些什么吧!~~