进程间通信

1 linux下进程间通信的几种主要方式:

   管道、有名管道、信号量、消息队列、信号、共享内存、socket

2 管道

  #include <unistd.h>

  int pipe(int fd[2]);

  管道只能半双工工作,一端写一端读,两端分别用fd[0]和fd[1]描述

 

3 有名管道

 #include <sys/types.h>

 #include <sys/stat.h>

 Int mknod(const char*path, mode_t mod,dev_t dev);

 Int mkfifo(const char *path, mode_t mode);

 

4 消息队列

  核心数据机构:msqid_ds

 

  #include <sys/types.h>

  #include <sys/ipc.h>

  Key_t ftok(const char*  pathname,int proj_id); 获取消息队列的键值

 

  #include <sys/mag.h>

  Int msgget(key_t,int msgflg);创建消息队列 

  Int msgsent(int msqid,struct msgbuf *msgp,size_t msgsz,int magflg);向消息队列发送消息

  Int msgrcv(int msqid,struct msgbuf *msgp,size_t msgsz,long int msgtype,int msgflg);从消息队 

                                                                     列接收消息

  Int msgctl(int msgid, int cmd, struct msqid_ds *buf);获取和设置消息队列

 

5 信号量

  核心数据结构:semid_ds

 

  #include <sys/sem.h>

  Int semget(key_t key,int nsems,int semflg);

  Int semop(int semid,struct sembuf *sops, size_t nsops);信号量的PV操作

  Int semctl(int semid, int semnum,int cmd,…);信号集的控制

 

6 共享内存

  核心数据结构:shmid_ds

 

  #include <linux/shm.h>

  Int shmget(key_t key,size_t size,int shmflg);创建共享内存区

  Void* shmat(int shmid ,const void *shmadrr, int shmflg);连接操作共享内存区

  Int shamdt(const void* shmaddr);进程结束使用共享内存区时,通过shmdt断开与共享内

                               存区的连接

  Int shamctl(int shmid,int cmd,struct shmid_ds *buf);

 

posted on 2012-09-03 14:19  好坏  阅读(423)  评论(0编辑  收藏  举报

导航