随笔分类 - linux / linux进程间通信(IPC)
摘要://reader_writer.c //reader_writer.c #include <sys/ipc.h> #include <sys/shm.h> #include <sys/types.h> #include <unistd.h> #include <error.h> #include <
阅读全文
摘要://account.h #ifndef _ACCOUNT_H #define _ACCOUNT_H typedef struct{ int code; double balance; //定义一把互斥锁,用来对多线程操作的银行账户(共享资源)进行加锁(保护)的 /* 建议一把互斥锁和一个共享资源(银
阅读全文
摘要://write.c #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <stdio.h> struct mymesg{ long mtype;//消息的类型,是一个整数且大于0 char mtex[51
阅读全文
摘要:信号量本质上就是共享资源的数目,用来控制对共享资源的访问; 信号量可用于进程间的同步和互斥; 每种共享资源对应一个信号量,信号量集就是有很多信号量,便于大量共享资源的操作,信号量集中的所有操作可以要求全部成功,也可以部分成功; 二元信号量(信号灯)值为0和1; 对信号量的操作就是进行PV操作; 信号
阅读全文
摘要:共享内存是被多个进程共享的一部分物理内存; 写入共享内存后,数据不会消失,可以一直读取; 再次向共享内存中写入,会覆盖原来的数据,即每次写数据都是从相同的位置上写(从shmat函数返回的地址开始写) 多进程想要进程数据通信,就得把这块共享内存映射到自己的虚拟地址空间,其在虚拟地址空间的位置: 共享内
阅读全文
摘要:System V IPC: Unix系统存在信号、管道等基本的进程间的通信机制; System V引入了三种高级的进程通信机制: 消息队列、共享内存、信号量 IPC对象(消息队列、共享内存、信号量)存在于内核中而不是文件系统中(虽然管道也是在内核中,但是它的释放由内核控制),由用户控制释放(即用户管
阅读全文
摘要:管道的实质:内核中的一块缓冲区 管道是单工的,数据只能从一个方向流向另外一个方向(单向);想要双向通信时,需要建立两个管道。 先写进管道中的数据先被读出。 无名管道: 用于有血缘关系的进程 int pipe(int fd[2]) 返回:成功返回0;失败:-1 因为pipe函数在fork之前调用,所以
阅读全文
摘要:六种通讯方式: 1. 无名管道和命名管道 2. 信号 3. 消息队列 4. 共享内存 5. 信号量 6. 套接字 所有进程共享3~4G的内核空间,所以基于内核之间的通信能够实现(为了保证安全,每个进程的用户地址空间都是独立的,一般而言一个进程不能直接访问另一个进程的地址空间,不过内核空间是每个进程都
阅读全文