面试准备-IPC通信

IPC通信有三种:共享内存、消息队列、信号灯

IPC对象的操作与文件读写操作的类比:

文件io                          IPC对象

open              msg_get shm_get sem_get

read write     msgsnd msgrecv shmat shmdt semop

close             msgctrl shmctrl semctrl

两个命令:

查看IPC对象     ipcs  -m(-q、-s)

删除IPC对象    ipcrm -m id

1.共享内存

1)创建或者打开    shmget(key_t key,int size,int shmflg)

key:IPC_PRIVATE ftok的返回值

返回:成功:共享内存段标识符 失败:-1

            IPC_PRIVATE创建的key值始终为0

char ftok(const char * path,char key);   创建key    可以实现无亲缘关系进程之间的通信

2)shmat 将共享内存映射到用户空间的地址中

void * shmat(int shmid,const void * shmaddr,int shmflg)

shmaddr:映射到的地址,NULL时系统自动完成映射

shmflg:SHM_RDONLY共享内存只读

             默认是0,表示共享内存可读写

返回值:成功:映射后的地址

                失败:NULL

3)shmdt 将用户空间的缓存释放

       int shmdt(const void * shmaddr);

4)shmctl 将内核空间的共享内存

      int shmctl(shmid,cmd,struct shmid_ds * buf);

      cmd:IPC_STAT   获得对象属性      IPC_SET  设置对象属性          IPC_RMID      删除对象

 

你可能感兴趣的:(嵌入式软件工程师面试笔试)