Chinaunix首页 | 论坛 | 博客
  • 博客访问: 148403
  • 博文数量: 26
  • 博客积分: 645
  • 博客等级: 上士
  • 技术积分: 340
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-05 15:00
文章分类

全部博文(26)

文章存档

2014年(1)

2013年(1)

2011年(22)

2010年(1)

2009年(1)

我的朋友

分类: LINUX

2011-08-21 23:44:15

fork后父子进程通信的例子,有一点值得注意:
fork之后第一时间是子进程在执行,如果子进程不执行sleep(3);,调用read会因为管道无写进程而返回0。因此要等待父进程开始写管道再进行读操作。
  1. #include <stdio.h>
  2. #include <sys/stat.h>
  3. #include <unistd.h>
  4. #include <fcntl.h>

  5. int main(void)
  6. {
  7.     pid_t pid;
  8.     FILE *fp;
  9.     char buff[100];
  10.     int i=0;
  11.     int n;

  12.     unlink("./myfifo");
  13.     if(mkfifo("./myfifo", 0777) < 0)
  14.     {
  15.         printf("error in %s:%d.\n", __FILE__, __LINE__);
  16.         /* exit(1); */
  17.     }
  18.     if((pid = fork()) < 0)
  19.     {
  20.         printf("error in %s:%d.\n", __FILE__, __LINE__);
  21.         exit(1);
  22.     }
  23.     if(pid > 0)
  24.     {
  25.         fp = open("./myfifo", O_WRONLY);
  26.         while(1)
  27.         {
  28.             i++;
  29.             memset(buff, 0, 100);
  30.             sprintf(buff, "------ %d -------\n", i);
  31.             write(fp, buff, strlen(buff));
  32.             sleep(3);
  33.         }
  34.     }
  35.     else
  36.     {
  37.         fp = open("./myfifo", O_RDONLY);
  38.         sleep(3);
  39.         while((n = read(fp, buff, 100) > 0 ))
  40.         {
  41.             printf("%s\n", buff);
  42.             sleep(1);
  43.         }
  44.         printf("child process's n%d.\n", n);
  45.     }
  46.     return 0;
  47. }

阅读(1329) | 评论(0) | 转发(0) |
0

上一篇:进程中使用环境变量

下一篇:IPC 消息队列

给主人留下些什么吧!~~