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. Web博文目录

    前言 博客写的多了,自己翻起来也费劲,这里就进行一下整合. 以前设想自己做DBA,做运维,没想到最后还要走开发这条路,干一行就爱一行...学的扎实点,工作起来也会轻松.—— 送给奋斗的自己 1 Jav ...

  2. 在Java中如何进行BASE64编码和解码

    在Java中如何进行BASE64编码和解码 //在Java中如何进行BASE64编码和解码 package me.xzh.study.sun.misc.BASE64; import sun.misc. ...

  3. yii2.0 Activeform表单部分组件使用方法 [ 2.0 版本 ]

    文本框:textInput(); 密码框:passwordInput(); 单选框:radio(),radioList(); 复选框:checkbox(),checkboxList(); 下拉框:dr ...

  4. Clean WRH$_ACTIVE_SESSION_HISTORY in SYSAUX

    Tablespace SYSAUX grows quickly. Run Oracle script awrinfo.sql to find what is using the space. One ...

  5. 【深入理解JAVA虚拟机】第二部分.内存自动管理机制.1.内存区域

    1.内存区域 根据<Java虚拟机规范(Java SE 7版)> 的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如图所示.  程序计数器 当前线程所执行的字节码的行号指 ...

  6. February 7 2017 Week 6 Tuesday

    It does not do to dwell on dreams, and forget to live. 人不能只生活在梦里,只依靠虚幻的东西而忘记了生活. Don't forget to liv ...

  7. [EffectiveC++]item37:绝不重新定义继承而来的缺省参数值

    绝不重新定义继承而来的缺省参数值 静态类型 动态类型

  8. 如何在SAP C4C里使用ABSL消费第三方Restful API

    首先我们得有一个可以正常工作的Restful API: 然后在Cloud for Customer的Cloud Application Studio里创建Restful API的模型,把第一步可以正常 ...

  9. 奇葩拿shell + 提权wind08r2奇葩拿shell + 提权wind08r2戏

    0x01 小隐拿站篇 某省还是市级还是县级的空防部 先来刺探目录,拿起御剑, 啪啪啪  (鼓掌)后台出来了   试试弱口令 擦  需要管理员验证码,这个咋玩????这个注入都不用找了,就算注射出账号密 ...

  10. 获取DataTable某一列的所有值

    /// <summary> /// 获取某一列的所有值 /// </summary> /// <typeparam name="T">列数据类型 ...