linux中用管道实现兄弟进程通信

1 使用fork函数创建两个子进程。在第一个子进程中发送消息到第二个子进程,第二个子进程都出来并处理。

2 在父进程中,不适用管道通信,所以什么不需要做直接关闭勒管道的两端

3 代码实现

 1 #include <unistd.h>
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #include <limits.h>
 5 #include <fcntl.h>
 6 #include <sys/types.h>
 7 #define BUFSZ PIPE_BUF
 8 void err_quit(char * msg){
 9     perror( msg );
10     exit(1);
11 }
12 int main ( void )
13 {
14     int fd[2];
15     char buf[BUFSZ];        /* 缓冲区 */
16     pid_t pid;
17     int len = 0;
18     if ((pipe(fd)) < 0 )    /*创建管道*/
19         err_quit( "pipe" );
20     if ( (pid = fork()) < 0 )                    /*创建第一个子进程*/
21         err_quit("fork");
22     else if ( pid == 0 ){                        /*子进程中*/
23         close ( fd[0] );/*关闭不使用的文件描述符*/
24         write(fd[1], "hello son!\n", 15 );    /*发送消息*/
25         exit(0);
26     }
27     if ( (pid = fork()) < 0 )                    /*创建第二个子进程*/
28         err_quit("fork");
29     else if ( pid > 0 ){                        /*父进程中*/
30         close ( fd[0] );
31         close ( fd[1] );
32         exit ( 0 );
33     }
34     else {                                        /*子进程中*/
35         close ( fd[1] );                        /*关闭不使用的文件描述符*/
36         len = read (fd[0], buf, BUFSZ );        /*读取消息*/
37         write(STDOUT_FILENO, buf, len);
38         exit(0);
39     }
40 }

4 截图

时间: 2024-10-10 15:14:00

linux中用管道实现兄弟进程通信的相关文章

Linux系统编程札记:进程通信(一) &nbsp; &nbsp;

进程简单来讲就是一个程序的一次执行,这里说的进程一般都指的是运行在用户态的进程,而处于用户态的不同进程之间是彼此相互隔离的,它们必须通过某种方式来进行通信,具体理由如下: (1)数据传输:有时候一个进程需要将它的数据发送给另一个进程. (2)资源共享:有时候多个进程之间需要共享同样的资源. (3)通知事件:有时候一个进程需要向另一个或一组进程发送消息,通知它们发生了某个事件. (4)进程控制:有些进程希望能够完全控制另一个进程的执行,此时控制进程希望能够拦截另一进程的所有操作,并能够及时知道它的

linux各种IPC机制(进程通信)

linux各种IPC机制 (2011-07-08 16:58:35)     原文地址:linux各种IPC机制(转)作者:jianpengliu 原帖发表在IBM的developerworks网站上,是一个系列的文章,作者郑彦兴,通过讲解和例子演示了Linux中几种IPC的使用方式,我觉得很好,在这里做一个保留,能看完的话Linux IPC的基础是没有问题的了.一)Linux环境进程间通信(一)管道及有名管道http://www.ibm.com/developerworks/cn/linux/

linux高级编程之socket进程通信

Socket套接字不仅可以用于网络通信和局域网通信还可以用于本地的进程通信. 创建套接字时使用本地协议PF_UNIX,套接字分为流失套接字,数据报套接字. Socket本地进程通信较其他的进程间通信方式(管道,system Ⅴ,BSD)使用更加方便.效率. 本地地址结构: Struct  sockaddr_un   //<sys/un.h> { Sa_family_t sun_family; Char sun_path[108]; //套接字的文件路径 } 填充地址结构: 1.定义:struc

Linux中用 grep查找特定进程,屏蔽grep进程本身(也就是不出现grep --color=auto)

日常操作linux 中,通常在使用 ps命令后 用管道连接 查询特定进程会显示 grep进程本身. 如下: 1 [[email protected] ~]# ps -ef|grep gs4 2 root 6284 5879 0 14:30 pts/0 00:00:00 grep --color=auto gs4 1 [[email protected] gs4]# ps axu |grep gs4 2 root 2480 0.0 0.0 112728 972 pts/0 S+ 14:20 0:0

pipe实现兄弟进程通信

pipe实现进程间通信,首先关闭第一个子进程的读入端,然后关闭第二个子进程的写入端 #include<stdio.h> #include<stdlib.h> #include<unistd.h> int main() { int fd[2]; pipe(fd); pid_t pid = fork(); if(pid==0) { close(fd[0]); write(fd[1],"Hello",6); exit(0); close(fd[1]); }

Linux下进程通信之管道

每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication).如下图所示. 目前进程通信的方式有: 管道 FIFO 消息队列 信号量 共享内存 套接字 管道 管道概念 管道是Linux支持的最初Unix IPC形式之一,具有以下特点: 管道是半双工的,数

Linux 进程间通信-管道

进程间通讯———管道 Linux 进程间通信-管道 进程是一个独立的资源分配单位,不同进程之间的资源是相互独立的,没有关联,不能在一个进程中直接访问另一个进程中的资源.但是,进程不是孤立的,不同的进程之间需要信息的交换以及状态的传递,因此需要进程间数据传递.同步与异步的机制. 此篇博文记录管道. 管道pipe 管道是进程间通信的主要手段之一.一个管道实际上就是个只存在于内存中的文件,对这个文件的操作要通过两个已经打开文件进行,它们分别代表管道的两端.管道是一种特殊的文件,它不属于某一种文件系统,

Linux进程通信----匿名管道

Linux进程通信中最为简单的方式是匿名管道 匿名管道的创建需要用到pipe函数,pipe函数参数为一个数组 表示的文件描述字.这个数组有两个文件描述字,第一个是用 于读数据的文件描述符第二个是用于写数据的文件描述符. 不能将用于写的文件描述符进行读操作或者进行读的文件描述 符进写操作,这样都会导致错误. 关于匿名管道的几点说明: 1.匿名管道是半双工的,即一个进程只能读,一个进程只能写    要实现全双工,需要两个匿名管道. 2.只能在父子进程或者兄弟进程进行通信. 3.在读的时候关闭写文件描

linux进程通信之命名管道

前一节学习了无名管道,这节学习命名管道. 二命名管道 无名管道只能用来在父子进程或兄弟进程之间进行通信,这就给没有亲缘关系的进程之间数据的交换带来了麻烦,解决这个问题就是本节要学习的另一种管道通信:命名管道. 命名管道也被称为FIFO文件,FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中.这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程以及FIFO的创建进程之间),因此,通过FIF