寸阳分阴须爱惜,休负春色与时光。这篇文章主要讲述进程间通信(IPC)相关的知识,希望能为你提供帮助。
一、什么是进程间通信?
在linux环境下,进程地址空间是相互独立的,每个进程都有各自不同的用户地址空间。任何一个进程的全局变量在另外一个进程中都是看不到的,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程把数据从用户空间拷到内核缓冲区,另一个进程再从内核缓冲区把数据拷走,内核提供的这种机制就称为进程间通信。(InterProcess Communication,简称IPC)。
二、进程间通信的方式在进程间完成数据传递需要借助操作系统提供一些特殊的方法,以前有文件、管道、信号、共享内存、消息队列、套接字、命名管道等等。随着计算机技术的不断发展与成熟,现如今常见的进程间通信方式有:
三、最基本的IPC机制—管道mkfifo 管道名
//创建命名管道可以作用于两个不具有血缘关系的两个进程之间
管道的原理:实际上是内核使用环形队列机制,借助内核缓冲区(4k)实现。
管道的特征:
管道的局限性:
创建管道:pipe函数
#include <
stdio.h>
#include <
unistd.h>
#include <
stdlib.h>
#include <
string.h>
#include <
errno.h>
#include <
pthread.h>
void sys_err(const char *str)
perror(str);
exit(1);
int main()
int ret;
int fd[2];
pid_t pid;
char buf[1024];
char *str="hello pipe\\n";
ret=pipe(fd);
if(ret==-1)
sys_err("pipe error");
pid=fork();
if(pid>
0)
close(fd[0]);
//关闭读端
write(fd[1],str,strlen(str));
close(fd[1]);
else if(pid==0)
close(fd[1]);
//子进程关闭写端
ret=read(fd[0],buf,sizeof(buf));
write(STDOUT_FILENO,buf,ret);
close(fd[0]);
return 0;
通信前:
通信后:
管道的读写行为
1.读管道:
2.写管道:
【进程间通信(IPC)】
推荐阅读
- DevOps: 每个阶段最常用的工具有哪些()
- SynchronousQueue 源码解析
- 浅析Win8系统的那些鲜为人知的技巧
- Win8系统还原初始化技巧介绍
- Win8文件资源管理器中常用位置的清除办法
- Win8 Modern游戏不能存档怎样办
- 处理Win 8打开文件夹假死的办法
- 处理Win8/Win 8系统无法自动更新的办法
- win8系统如何设置账号密码