linux进程篇 (三) 进程间的通信3 IPC通信
发布时间:2020-12-14 01:48:50 所属栏目:Linux 来源:网络整理
导读:3 IPC通信 用户空间 进程A ----无法通信---- 进程B -----------------|--------------------------------------|-------------- | | 内核空间 |------------- IPC ---------------| ----------------------------------------------------------------------
用户空间 进程A <----无法通信----> 进程B -----------------|--------------------------------------|-------------- | | 内核空间 |<-------------> IPC <--------------->| ---------------------------------------------------------------------- IPC分3种: 消息队列 共享内存 信号灯 open msgget shmget semget read/write msgsen msgrecv shmat shmdt semop close msgctrl shmctrl semctrl ? #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,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,int shmflg); //将共享内存的地址映射到用户空间 //int shmid :ID号 //const void *shmaddr 映射到的地址,NULL为系统自动分配 //shmflg SHM_RDONLY 只读,默认是0 可读可写 //返回值 映射后的地址。 失败NULL ? ? #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[128]; shmid = shmget(IPC_PRIVATE,128,0755); if(shmid < 0){ perror("shmget"); } printf("shmid = %dn",shmid); system("ipcs -m"); //查看 sprintf(cmd,"ipcrm -m %d",shmid); system(cmd); return 0; } ? 2. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |