进程间通信 - interprocess communication, IPC

进程间通信
interprocess communication, IPC


管道,无名管道和有名管道,它们是和内存中的一个索引点相关联的两个文件描述符。
创建管道
#include <unistd.h>
int pipe(int filedes[2]);


FIFO
int mkfifo(const char *pathname, mode_t mode);


共享内存
创建共享内存区
int shmget(key_t key, int size, int flags);
附加共享内存
char* shmat(int shmid, char *shmaddr, int flags);
分离共享内存区
int shmdt(char *shmadr);




消息队列
是一个消息的链接列表,消息都保存在内核中,进程通过一种共享内存区使用的标识符同种类的


标识符标识消息。
创建一个新队列或打开一个已有的队列。
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int msgget(key_t key, int flags);


向队列中写入消息
int msgsnd(int msqid, const void *prt, size_t nbytes, int flags);


struct msgbuf
{
long mtype;
char mtext[1];
};
这个结构声明实际只是一个模板,可以进行扩展以满足应用程序的需要,msgbuf可简单地看作是


一个long型整数后跟消息数据,消息数据可以采用你觉得合适的格式。


读取队列中的消息
int msgrcv(int msqid, void *ptr, size_t nbytes, long type, int flags);


删除消息队列
int msgctl(int msqid, int cmd, struct msqid_ds *buf);




信号灯
控制对共享资源的访问,同步共享资源,从这方面来看,信号灯的用法和文件或记录加锁机制非常类似,但区别在于信号灯可以用于文件以外的更多资源。


创建信号灯
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int semget(key_t key, int nsems, int flags);


semop函数是最常用的信号灯例程,它在一个或多个由semget调用创建或访问的信号灯上执行操作。
int semop(int semid, struct sembuf *semops, unsigned nops);
struct sembuf
{
short sem_num;
short sem_op;
short sem_flg;
};


控制信号灯
int semctl(int semid, int semnum, int cmd, union semun arg);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值