码迷,mamicode.com
首页 > 其他好文 > 详细

进程间通信(IPC)

时间:2014-10-02 18:46:03      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   使用   ar   for   

概述

1、Linux使用的进程间通信方式主要包括:

(1)管道(pipe)和有名管道  (2)信号(signal)  (3)共享内存   (4)消息队列  (5)信号量  (6)套接字(socket)

2、问:为什么进程间需要通信?

(1)数据传输  一个进程需要将它的数据发送给另外一个进程

(2)资源共享  多个进程间共享同样的资源

(3)通知事件  一个进程需要向另外一个或一组进程发送消息,通知它们发生了某种事件

(4)进程控制  某些进程希望能够控制另一个进程的执行(比如Debug进程),此时,控制进程希望能够拦截另外一个进程的所有操作,并且能够及时知道它的状态改变。

 3、Linux进程间通信由以下几部分发展以来:

(1)UNIX进程间通信  (2)基于System V 进程间通信  (3)POSIX进程间通信

一、管道通讯

管道:单向的、先进先出的,它将一个进程的输出和另一个进程的输入连接在一起。写进程在管道的尾部写入数据,读进程在管道的头部读取数据。

注: 数据被一个进程读出后,将被从管道中删除,其它读进程将不能再读到这些数据。管道提供了简单的流控制机制,进程试图读空管道时,进程将堵塞。同样,管道已经满时,进程再试图向管道写入数据,进程将阻塞。】

分类:无名管道  用于父、子进程间的通信;

        命名管道  用于运行于同一系统中的任意两个进程间的通信。

 (1)无名管道  由pipe()函数创建:

1 #include <unistd.h>
2 int pipe(int filedis[2]);

 

当一个管道建立时,它会建立两个文件描述符,存放在filedis数组中:filedis[0]用于读管道,filedis[1]用于写管道。  返回值:成功,返回0;失败,返回-1,并设置errno。

管道的关闭:关闭管道只需将这两个文件描述符关闭即可,可以使用普通的close函数逐个关闭。

注:必须在系统调用fork()前调用pipe(),否则子进程将不会继承文件描述符。

 

bubuko.com,布布扣
 1  //创建管道
 2  #include <unistd.h>
 3  #include <errno.h>
 4  #include <stdio.h>
 5  #include <stdlib.h>
 6  
 7  int main()
 8  {
 9      int pipe_fd[2];
10      if(pipe(pipe_fd) < 0)
11      {
12          printf("pipe create error.\n");
13          return -1;
14      }
15      else 
16          printf("pipe create success.\n");
17  
18      close(pipe_fd[0]);
19      close(pipe_fd[1]);
20      return 0;
21  }
创建管道

 

 

 

 

二、信号通讯

 

三、共享内存通讯

 

进程间通信(IPC)

标签:style   blog   http   color   io   os   使用   ar   for   

原文地址:http://www.cnblogs.com/shiddong/p/4004204.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!