3 IPC通信

用户空间         进程A          <----无法通信---->        进程B
-----------------|--------------------------------------|--------------
| |
内核空间 |<-------------> IPC <--------------->| ---------------------------------------------------------------------- IPC分3种:
消息队列 共享内存 信号灯 open msgget shmget semget
read/write msgsen msgrecv shmat shmdt semop
close msgctrl shmctrl semctrl

3.1 共享内存

#include <sys/shm.h>
#include <sys/ipc.h>
#include <sys/types.h> int shmget(key_t key, size_t size, int shmflg); //创建共享内存
key_t ftok(const char *path, int id); //创建key值 void *shmat(int shmid, const void *shmaddr, int shmflg); //将共享内存的地址映射到用户空间
int shmdt(const void *shmaddr);
int shmget(key_t key, size_t size, int shmflg);

//key IPC_PRIVATE 或者ftok的返回值
//size_t size 共享内存的大小#include <sys/ipc.h> system("ipcs -m"); //查看共享内存
sprintf(cmd,"ipcrm -m %d",shmid);
system(cmd); //删除共享内存 key_t ftok(const char *path, int id); //创建key值
//path文件路径,id 一个字符
//成功-> key 失败-> -1;
void *shmat(int shmid, const void *shmaddr, int shmflg);    //将共享内存的地址映射到用户空间
//int shmid :ID号
//const void *shmaddr 映射到的地址,NULL为系统自动分配
//shmflg SHM_RDONLY 只读,默认是0 可读可写
//返回值 映射后的地址。 失败NULL

3.2 消息队列

3.3 信号灯

#include <sys/sem.h>

int semget(key_t key, int nsems, int semflg);    //创建sem信号灯

int semctl(int semid, int semnum, int cmd, ...); //关闭sem信号灯

#include <semaphore.h>
int sem_wait(sem_t *sem);
int sem_post(sem_t *sem);

例子 1.shmget

#include <stdio.h>
#include <string.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h> int main(int argc, char const *argv[])
{
int shmid;
char cmd[];
shmid = shmget(IPC_PRIVATE,,);
if(shmid < ){
perror("shmget");
}
printf("shmid = %d\n",shmid);
system("ipcs -m"); //查看 sprintf(cmd,"ipcrm -m %d",shmid);
system(cmd);
return ;
}

2.

最新文章

  1. SerialPort 串口开发
  2. Firefox 插件 FlashGot 创建 Axel 下载任务
  3. 头文件algorithm中的常用函数
  4. git点滴的积累
  5. sizeof()和strlen()的区别与联系
  6. python 练习 18
  7. Redis应用案例,查找某个值的范围(转)
  8. JAVA IO 类库详解
  9. IDEA中利用JUnit进行单元测试
  10. MSIL
  11. Swift - whose view is not in the window hierarchy 问题解决方法
  12. MySQL查询1
  13. 有关Ajax跨域请求的解决方案
  14. js万年历,麻雀虽小五脏俱全,由原生js编写
  15. Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
  16. __x__(22)0907第四天__ 垂直外边距重叠
  17. 发现了一个比较有意思的url参数
  18. Android Studio导入jar包
  19. Java 强制类型转换(类转换注意事项)
  20. Django REST framework 第五章 Relationships &amp; Hyperlinked APIs

热门文章

  1. 【Leetcode】【Medium】Construct Binary Tree from Preorder and Inorder Traversal
  2. Python学习---socketServer编程
  3. 什么是封装? ----------------php中&quot;public&quot;类似的访问修饰符分别有什么作用?----什么是抽象?抽象的关键字以及用法----- 什么是接口?接口的关键字以及用法-------------
  4. 新款Macbook 安装任意来源软件教程 mac软件下载资源推荐
  5. spring初始化完成后执行初始化数据方法
  6. July 09th 2017 Week 28th Sunday
  7. 在Kubernetes上运行SAP UI5应用(下): 一个例子体会Kubernetes内容器的高可用性和弹性伸缩
  8. 程序中实现两个DataTable的Left Join效果(修改了,网上第二个DataTable为空,所处的异常)
  9. Java 学习笔记1
  10. Redis配置文件(1)units/includes/GENERAL/SECURITY/LIMITS