随笔分类 -  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 < 阅读全文
posted @ 2023-03-30 10:32 踏浪而来的人 阅读(26) 评论(0) 推荐(0) 编辑
摘要://account.h #ifndef _ACCOUNT_H #define _ACCOUNT_H typedef struct{ int code; double balance; //定义一把互斥锁,用来对多线程操作的银行账户(共享资源)进行加锁(保护)的 /* 建议一把互斥锁和一个共享资源(银 阅读全文
posted @ 2023-03-29 22:50 踏浪而来的人 阅读(57) 评论(0) 推荐(0) 编辑
摘要://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 阅读全文
posted @ 2023-03-28 17:32 踏浪而来的人 阅读(17) 评论(0) 推荐(0) 编辑
摘要:信号量本质上就是共享资源的数目,用来控制对共享资源的访问; 信号量可用于进程间的同步和互斥; 每种共享资源对应一个信号量,信号量集就是有很多信号量,便于大量共享资源的操作,信号量集中的所有操作可以要求全部成功,也可以部分成功; 二元信号量(信号灯)值为0和1; 对信号量的操作就是进行PV操作; 信号 阅读全文
posted @ 2023-03-06 22:30 踏浪而来的人 阅读(186) 评论(0) 推荐(0) 编辑
摘要:共享内存是被多个进程共享的一部分物理内存; 写入共享内存后,数据不会消失,可以一直读取; 再次向共享内存中写入,会覆盖原来的数据,即每次写数据都是从相同的位置上写(从shmat函数返回的地址开始写) 多进程想要进程数据通信,就得把这块共享内存映射到自己的虚拟地址空间,其在虚拟地址空间的位置: 共享内 阅读全文
posted @ 2023-03-06 20:43 踏浪而来的人 阅读(309) 评论(0) 推荐(0) 编辑
摘要:System V IPC: Unix系统存在信号、管道等基本的进程间的通信机制; System V引入了三种高级的进程通信机制: 消息队列、共享内存、信号量 IPC对象(消息队列、共享内存、信号量)存在于内核中而不是文件系统中(虽然管道也是在内核中,但是它的释放由内核控制),由用户控制释放(即用户管 阅读全文
posted @ 2023-03-05 21:56 踏浪而来的人 阅读(133) 评论(0) 推荐(0) 编辑
摘要:管道的实质:内核中的一块缓冲区 管道是单工的,数据只能从一个方向流向另外一个方向(单向);想要双向通信时,需要建立两个管道。 先写进管道中的数据先被读出。 无名管道: 用于有血缘关系的进程 int pipe(int fd[2]) 返回:成功返回0;失败:-1 因为pipe函数在fork之前调用,所以 阅读全文
posted @ 2023-03-02 23:04 踏浪而来的人 阅读(91) 评论(0) 推荐(0) 编辑
摘要:六种通讯方式: 1. 无名管道和命名管道 2. 信号 3. 消息队列 4. 共享内存 5. 信号量 6. 套接字 所有进程共享3~4G的内核空间,所以基于内核之间的通信能够实现(为了保证安全,每个进程的用户地址空间都是独立的,一般而言一个进程不能直接访问另一个进程的地址空间,不过内核空间是每个进程都 阅读全文
posted @ 2023-03-02 19:36 踏浪而来的人 阅读(19) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示