1.介绍:

  1)同一主机:

   unix进程通信方式:无名管道,有名管道,信号

   system v方式:信号量,消息队列,共享内存

  2)网络通信:Socket,RPC

2.管道:

  无名管道(PIPE):使用一个进程的标准输出作为另一个进程的标准输入建立的一个单向管道,执行完成后消失。主要用于父进程与子进程之间,或者两个兄弟进程之间。采用的是单向

  1)创建无名管道:(#include(unistd.h))

  extern int pipe(int pipes[2]),pipes[0]完成读操作,pipes[1]完成写操作。

 #include <unistd.h>
#include <stdio.h>
int main(){
int pipes[];
if(pipe(pipes)<){
printf("pipe create failed.\n");
return-;
}
else{
printf("pipe create successfully.\n");
close(pipe_filed[]);
close(pipe_filed[]);
}
}

  父子进程通信:

 #include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
int main(){
char buf[];
int pipes[];
if(pipe(pipes)< ){
printf("Create pipe failed.\n");
return-;
}
memset(buf,,);
int pid;
pid= fork();
if(pid== ){
printf("In child process.\n");
close(pipes[]);
read(pipes[],buf, );
printf("%s.\n",buf);
close(pipes[]);
}
else if(pid > ){
printf("In parent process.\n");
close(pipes[]);
write(pipes[],"Hello\n ",);
close(pipes[]);
wait(NULL);
}
return ;
}

3.有名管道(FIFO):

  依赖具体文件系统,是一个存在的特殊文件,实现进程对文件系统下某文件的访问,有名管道和普通文件有一样的属性,如磁盘路径,文件权限等,但并不是存放在磁盘,而在内存中,只拥有磁盘接口。

  创建有名管道:

  extern int mkfifo(char *path,mode_t mode)

 

 #include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
int main()
{
int res = mkfifo("/home/code", );
if(res == )
{
printf("FIFO created\n");
}
exit(EXIT_SUCCESS);
}

linux进程通信之管道的更多相关文章

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

    Linux进程通信中最为简单的方式是匿名管道 匿名管道的创建需要用到pipe函数,pipe函数参数为一个数组表示的文件描述字.这个数组有两个文件描 述字,第一个是用于读数据的文件描述符第二个是用于写数 ...

  2. linux 进程通信之 管道和FIFO

    进程间通信:IPC概念 IPC:Interprocess Communication,通过内核提供的缓冲区进行数据交换的机制. IPC通信的方式: pipe:管道(最简单) fifo:有名管道 mma ...

  3. Linux 进程通信之管道

    管道是单向的.先进先出的,它把一个进程的输出和还有一个进程的输入连接在一起.一个进程(写进程)在管道的尾部写入数据,还有一个进程(读进程)从管道的头部读出数据.数据被一个进程读出后,将被从管道中删除, ...

  4. Linux学习笔记(13)-进程通信|命名管道

    匿名管道只能在具有亲属关系的进程间通信,那么如果想要在不具有亲戚关系,想在陌生人之间通信,那又该怎么办呢? 别慌,Linux身为世界上*强大的操作系统,当然提供了这种机制,那便是命名管道-- 所谓命名 ...

  5. linux 进程通信 管道

    1. 管道概述及相关API应用 1.1 管道相关的关键概念 管道是Linux支持的最初Unix IPC形式之一,具有以下特点: 管道是半双工的,数据只能向一个方向流动:需要双方通信时,需要建立起两个管 ...

  6. Linux下进程通信之管道

    每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把 ...

  7. Linux进程通信之匿名管道

    进程间的通信方式 进程间的通信方式包括,管道.共享内存.信号.信号量.消息队列.套接字. 进程间通信的目的 进程间通信的主要目的是:数据传输.数据共享.事件通知.资源共享.进程控制等. 进程间通信之管 ...

  8. linux下的进程通信之管道与FIFO

    概念:管道是由内核管理的一个缓冲区,相当于我们放入内存中的一个纸条.管道的一端连接一个进程的输出.这个进程会向管道中放入信息.管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息. 优点:不需 ...

  9. 进程通信类型 管道是Linux支持的最初Unix IPC形式之一

    管道 Linux环境进程间通信(一) https://www.ibm.com/developerworks/cn/linux/l-ipc/part1/index.html 管道及有名管道 郑彦兴200 ...

随机推荐

  1. hdu 1053 Entropy (哈夫曼树)

    Entropy Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  2. 洛谷 P2486 [SDOI2011]染色/bzoj 2243: [SDOI2011]染色 解题报告

    [SDOI2011]染色 题目描述 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同 ...

  3. bzoj进度条

    好久没发进度了 这个月没有上个月那么猛,肯能使因为这个月不想水题吧 No. 510 Solved Problems List Solved 368 10001001100210071008101210 ...

  4. ubuntu使用su切换root用户提示“认证失败”

    在虚拟机上安装了ubuntu,安装时提示设置密码,也设置了,但是在终端操作时,遇到权限不够的问题,于是就想到就是要切换root用户,获取最高权限. 当我使用 su 切换到root用户时,提示我输入密码 ...

  5. [bzoj 1208]STL水过

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1208 看网上的题解都用的手写数据结构……然而直接用set的lower_bound就水过去了 ...

  6. HDU - 1880 魔咒词典~哈希入门

    哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. 给你一部魔咒词 ...

  7. Input操作文件

    在HTML表单中,可以上传文件的唯一控件就是<input type="file">. 注意:当一个表单包含<input type="file" ...

  8. MySQL主主搭建

    1.在MySQL主从的基础上修改: #master1上 [mysqld] server-id=101 log-bin = mysql-bin auto-increment-increment = 2 ...

  9. python实现后台系统的JWT认证

    介绍一种适用于restful+json的API认证方法,这个方法是基于jwt,并且加入了一些从oauth2.0借鉴的改良. 1. 常见的几种实现认证的方法 首先要明白,认证和鉴权是不同的.认证是判定用 ...

  10. WebView使用--文章集锦

    对于android WebView加载不出Html5网页的解决方法 在android4.4中webview的使用相对于之前版本的一些区别 理解WebKit和Chromium: Android 4.4 ...