`
verge
  • 浏览: 12996 次
  • 性别: Icon_minigender_2
最近访客 更多访客>>
社区版块
存档分类
最新评论

进程间通信-管道 (菜鸟级学习笔记 2006-5-17)

阅读更多
今天看了一下进程间通信,在原来上操作系统的时候死活不知道管道是怎么一回事,看完并运行这个程序后总算清楚了,贴出来也给大家看下。
cpp 代码
 
  1. /* 进程间通信 
  2. * 管道──一种单向通信通道,数据在一端写入,在另一端读出 
  3. * pipedemo.c -- 演示使用管道进行I/O 
  4. */  
  5. #include  
  6. #include  
  7. #include  
  8.   
  9. int main(int argc, char **argv)  
  10. {  
  11.         static const char mesg[] = "Don't panic!";  
  12.         char buf[BUFSIZ];  
  13.         ssize_t rcount, wcount;  
  14.         int pipefd[2];  
  15.         size_t len;  
  16.          
  17.         // 系统调用pipe(int filedes[2])用于创建管道。若调用成功,它创建两个文件描述符并将它们分别存入filedes指向的数组中,这两个文件描述符分别指向管道的两端,filedes[0]用作读,filedes[1]用作写  
  18.         if (pipe(pipefd) < 0)  
  19.         {  
  20.                 fprintf(stderr, "%s: pipe failed: %s\n", argv[0], strerror(errno));  
  21.                 exit(1);  
  22.         }  
  23.          
  24.         printf("Read end = fd %d, write end = fd %d\n", pipefd[0], pipefd[1]);  
  25.   
  26.         len = strlen(mesg);  
  27.         // 向管道中写入  
  28.         if ((wcount = write(pipefd[1], mesg, len)) != len)  
  29.         {  
  30.                 fprintf(stderr, "%s: write failed: %s\n", argv[0], strerror(errno));  
  31.                 exit(1);  
  32.         }  
  33.         // 从管道中读数据  
  34.         if ((rcount = read(pipefd[0], buf, BUFSIZ)) != wcount)  
  35.         {  
  36.                 fprintf(stderr, "%s: read failed: %s\n", argv[0], strerror(errno));  
  37.                 exit(1);  
  38.         }  
  39.   
  40.         buf[rcount] = '\0';  
  41.   
  42.         printf("Read <%s> from pipe\n", buf);  
  43.         close(pipefd[0]);  
  44.         close(pipefd[1]);  
  45.   
  46.         return 0;  
  47. }  

运行:

[ 本帖最后由 verge 于 2006-5-14 07:52 PM 编辑 ]

图片附件: pipedemo.jpg (7.09 K)

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics