今天看了一下进程间通信,在原来上操作系统的时候死活不知道管道是怎么一回事,看完并运行这个程序后总算清楚了,贴出来也给大家看下。
运行:
[ 本帖最后由 verge 于 2006-5-14 07:52 PM 编辑 ]
图片附件: pipedemo.jpg (7.09 K)
cpp 代码
- /* 进程间通信
- * 管道──一种单向通信通道,数据在一端写入,在另一端读出
- * pipedemo.c -- 演示使用管道进行I/O
- */
- #include
- #include
- #include
- int main(int argc, char **argv)
- {
- static const char mesg[] = "Don't panic!";
- char buf[BUFSIZ];
- ssize_t rcount, wcount;
- int pipefd[2];
- size_t len;
- // 系统调用pipe(int filedes[2])用于创建管道。若调用成功,它创建两个文件描述符并将它们分别存入filedes指向的数组中,这两个文件描述符分别指向管道的两端,filedes[0]用作读,filedes[1]用作写
- if (pipe(pipefd) < 0)
- {
- fprintf(stderr, "%s: pipe failed: %s\n", argv[0], strerror(errno));
- exit(1);
- }
- printf("Read end = fd %d, write end = fd %d\n", pipefd[0], pipefd[1]);
- len = strlen(mesg);
- // 向管道中写入
- if ((wcount = write(pipefd[1], mesg, len)) != len)
- {
- fprintf(stderr, "%s: write failed: %s\n", argv[0], strerror(errno));
- exit(1);
- }
- // 从管道中读数据
- if ((rcount = read(pipefd[0], buf, BUFSIZ)) != wcount)
- {
- fprintf(stderr, "%s: read failed: %s\n", argv[0], strerror(errno));
- exit(1);
- }
- buf[rcount] = '\0';
- printf("Read <%s> from pipe\n", buf);
- close(pipefd[0]);
- close(pipefd[1]);
- return 0;
- }
运行:
[ 本帖最后由 verge 于 2006-5-14 07:52 PM 编辑 ]
图片附件: pipedemo.jpg (7.09 K)