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.

linux进程篇 (三) 进程间的通信3 IPC通信的更多相关文章

  1. linux进程篇 (三) 进程间的通信2 信号通信

    2. 信号通信 用户空间 进程A <----无法通信----> 进程B -----------------|--------------------------------------|- ...

  2. linux进程篇 (三) 进程间的通信1 管道通信

    通信方式分4大类: 管道通信:无名管道 有名管道 信号通信:发送 接收 和 处理 IPC通信:共享内存 消息队列 信号灯 socke 网络通信 用户空间 进程A <----无法通信----> ...

  3. linux进程篇 (二) 进程的基本控制

    2. 进程的基本操作 接口函数 #include <unistd.h> //创建子进程 pid_t fork(void); //结束子进程 void exit(int status); / ...

  4. linux进程篇 (一) 进程的基本概念

    进程是系统资源分配的最小单位. 1.创建和执行 父进程通过 fork 系统调用创建子进程, 子进程被创建后,处于创建状态. linux为子进程配置数据结构,如果内存空间足够,子进程就在内核中就绪,成为 ...

  5. linux线程篇 (三) 线程的同步

    1 互斥量 pthreat_mutex_t mymutex; //1. 创建 初始化 int pthread_mutex_init(pthread_mutex_t *mutex, const pthr ...

  6. Linux基础篇三:文件系统

    /bin      实际上是  /usr/bin /sbin    实际上是  /usr/sbin /usr/bin 里面的命令其实是依赖  /lib64  或者    /lib32 ldd  /us ...

  7. 【Linux程序设计】之进程间的通信

    这个系列的博客贴的都是我大二的时候学习Linux系统高级编程时的一些实验程序,都挺简单的. 实验题目:Linux环境下的进程间通信 实验目的:熟悉进程通信中信号概念及信号处理:掌握进程间的管道通信编程 ...

  8. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  9. Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8479282.html 在Android中进程间通信是比较难的一部分,同时又非常 ...

随机推荐

  1. 【Leetcode】【Medium】Binary Tree Preorder Traversal

    Given a binary tree, return the preorder traversal of its nodes' values. For example:Given binary tr ...

  2. mysql io过高

    背景: 晚上,公司业务群里发信息说,有玩家在游戏里面赠送别人礼物后,赠送记录在20多分钟以后才出现,延时太高. 问题: 公司数据库使用mysql,配置了主从.配置的是,游戏程序写数据到主库,读数据到从 ...

  3. linu常用命令链接

    linux命令大全ps命令详解: http://www.jb51.net/LINUXjishu/151851.html Linux禁止ping以及开启ping的方法: http://www.cnblo ...

  4. posix进程间的通信

    1.无名管道 1.1管道是Linux支持的最初Unix IPC形式之一,具有以下特点: 管道是半双工的,数据只能向一个方向流动:需要双方通信时,需要建立起两个管道: 只能用于父子进程或者兄弟进程之间( ...

  5. 使用Vue-cli脚手架

    使用vue-cli脚手架开发vue项目,有以下好处: (1)成熟的Vue项目架构设计. (2)本地测试服务器(热更新). (3)集成打包上线方案. Vue-cli系统要求: Node.js(>= ...

  6. webpack导学

    随着前端工程越来越复杂,单独建几个文件写业务代码,这样的方式已经无法保证项目的可维护性了. 所以我们就想把不同的逻辑拆成模块,然后分开引入这些模块,每个模块自己做自己的事情,这样就可以保证项目的可维护 ...

  7. PHP----练习-----三级联动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 使用Nginx 做负载均衡

    Nginx可以作为一个非常高效的负载均衡系统,通过分发HTTP请求到多个应用服务器来提高整个系统的吞吐量,性能和可用性. 负载均衡的算法/机制 下面是Nginx支持的机制 轮询机制 轮询算法 最少连接 ...

  9. 可枚举接口的知识点(IEnumerable 接口)要使用foreach,就必须实现可枚举接口

  10. CSS兼容性问题总结及解决方法

    css兼容问题 兼容问题 1.文字本身的大小不兼容.同样是font-size:14px的宋体文字,在不同浏览器下占的空间是不一样的,ie下实际占高16px,下留白3px,ff下实际占高17px,上留白 ...