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. C/C++文件读取

    https://blog.csdn.net/stpeace/article/details/12404925

  2. Hadoop学习---Zookeeper+Hbase配置学习

    软件版本号: JDK:jdk-8u45-linux-i586.tar.gz Zookeeper:zookeeper-3.4.6 Hbase:hbase-1.0.0-bin 一.JDK版本更换 由于之前 ...

  3. Deep Learning Drizzle

    Deep Learning Drizzle Drench yourself in Deep Learning, Reinforcement Learning, Machine Learning, Co ...

  4. !important 语法

    语法: Selector{sRule!important;} 说明: 提升指定样式规则的应用优先权. IE6及以下浏览器有个比较显式的支持问题存在,!important并不覆盖掉在同一条样式的后面的规 ...

  5. easyui学习笔记11—tab标签页和鼠标动作

    这篇我们看看标签页是怎么实现的,默认情况下要靠点击切换标签,也可以用鼠标切换标签选项,就是鼠标放在标签上切换. 首先看看引用的资源文件 1.资源文件 <head> <meta cha ...

  6. zt C++标准库set类型

    C++标准库set类型 分类: C++编程语言 2012-11-06 10:53 909人阅读 评论(0) 收藏 举报 目录(?)[-] 在set中添加元素 从set中获取元素 set容器只是单纯的键 ...

  7. 泛型:上边界和通配符的使用以及对ArrayList的学习

      --------------- public class Wildcord { public static void main(String[] args) { /** * 类引用结构说明Pers ...

  8. Spark系列-SparkSQL实战

    Spark系列-初体验(数据准备篇) Spark系列-核心概念 Spark系列-SparkSQL 之前系统的计算大部分都是基于Kettle + Hive的方式,但是因为最近数据暴涨,很多Job的执行时 ...

  9. Linux CentOS6系统安装最新版本Node.js环境及相关文件配置

    Node.js,当前应用非常广泛的Javascript运行环境,采用C++编写的,目前应用较多的用于WEB应用中,执行效率还是非常高的,虽然老左不从业程序的开发,但是有些时候在玩VPS的时候还是会遇到 ...

  10. 决策树在sklearn中的实现

    1 概述 1.1 决策树是如何工作的 1.2 构建决策树 1.2.1 ID3算法构建决策树 1.2.2 简单实例 1.2.3 ID3的局限性 1.3 C4.5算法 & CART算法 1.3.1 ...