多任务并发乱记第三天(进程间的通信之IPC)

进程间的通信:IPC(IN PROCESS CONNECT)

消息队列,共享内存,信号量统称sytrem-v ipc

int key = ftok(const *char pathname,int proj_id )
参数一:路径 参数二:任意整数
返回值:生成的健值(具有唯一性) 失败返回-1

1.共享内存(SHM)

使用步骤:
(1)获取共享内存对象的ID.
int ID=shmget(key_t key,size_t size,int shmflg)//健值,大小,权限
返回值:成功返回共享内存ID,失败返回-1

(2)将共享内存映射到虚拟空间的某个区域
void *=shmat(int ID,NULL,int shmflg)//共享内存ID,NULL—表示让系统自动分配,内存权限,一般用0
不能设置成只写

返回值:成功返回内存所在首地址,失败返回-1

(3)不使用时,解除映射
shmdt(const void *shmaddr)
(4)不需要就删除.

往共享内存中填数据:
memcpy(p,buf,sizeof(buf))//共享内存首地址,数据,大小

ipcs用法
ipcs -a 是默认的输出信息 打印出当前系统中所有的进程间通信方式的信息
ipcs -m 打印出使用共享内存进行进程间通信的信息
ipcs -q 打印出使用消息队列进行进程间通信的信息
ipcs -s 打印出使用信号进行进程间通信的信息
输出格式的控制
ipcs -t 输出信息的详细变化时间

2.消息队列

(1)创建消息队列

msgget(hey_t key,int msgflg)

(2)准备存放消息的结构体
struct msgbuf
{
long mtype;
char mtext[];
}

(3)发送消息
msgsend()/msgrecv()

3.线程
(1)创建线程
pthread_t tid;
pthread_create(&tid,NULL,FNN,NULL)

线程的退出
pthread_exit(NULL)

线程属性
-lpthread
(2)设置分离属性
pthread_attr_setdetachstate()//参数一:线程属性变量 参数二:分离/结合

4.信号量

(1)创建信号量
semget(key, nsem,semflg)//健值,信号量个数,权限

(2)将信号量取出和放入(PV操作)

semop(int semid,struct sembuf sops[],unsigned nsops)

开始是接合属性,遇到pthread_join 后主线程阻塞,然后子线程设置分离属性,然后主线程等待子线程结束后才会继续运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值