Linux下IPC中的信号量PV操作
代码如下所示,两边对照查看程序!(左图为先运行进程 右图为后运行进程)

运行的效果就是:当左边的进程检测到EOF,释放资源V操作之后,右边的进程会迅速的执行对应的printf的操作!
所有代码文件结构如下:

sem_a.c(左边进程的代码,编译方式:gcc sem_a.c sempv.c -o sem_a)
#include <stdio.h>
#include "sempv.h" int main(int *argc, char *argv[])
{
key_t my_key = ;
int my_sem; my_sem = Create_sem(my_key,,|IPC_CREAT);
printf("setting val...\n");
init_sem(my_sem,,); printf("p...\n");
P(my_sem);
while(getchar() != EOF);
V(my_sem); sleep();
del_sem(my_sem); return ;
}
sem_b.c(右边进程的代码,编译方式:gcc sem_b.c sempv.c -o sem_b)
#include<stdio.h>
#include "sempv.h" int main(int *argc, char *argv[])
{
key_t my_key = ;
int my_sem; my_sem = Link_sem(my_key,,); printf("p....\n");
P(my_sem);
printf("sem1 finished!\n");
V(my_sem); return ;
}
sempv.c(PV操作的源程序,对应函数的实现)
#include "sempv.h" //P操作,申请一个资源
void P(int semid)
{
struct sembuf my_buf;
memset(&my_buf,,sizeof(my_buf));
my_buf.sem_num = ;
my_buf.sem_op = -;
my_buf.sem_flg = SEM_UNDO;
semop(semid,&my_buf,);
} void V(int semid)
{
struct sembuf my_buf;
memset(&my_buf,,sizeof(my_buf));
my_buf.sem_num = ;
my_buf.sem_op = ;
my_buf.sem_flg = SEM_UNDO;
semop(semid,&my_buf,);
} int Create_sem(key_t key,int index,int op)
{
int sem;
sem = semget(key,index,op);
if(sem == -)
{
printf("semget error!\n");
exit();
}
return sem;
} int Link_sem(key_t key,int index,int op)
{
int sem;
sem = semget(key,index,op);
if(sem == -)
{
printf("semget error!\n");
exit();
}
return sem;
} void init_sem(int sem,int index,int val) // Provent the sem be lock at the begin of the program!
{
semctl(sem,index,SETVAL,val);
} void del_sem(int sem)
{
semctl(sem,,IPC_RMID);
}
sempv.h头文件声明
#ifndef __SEMPV_H__
#define __SEMPV_H__ #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/sem.h> void P(int semid);
void V(int semid);
int Link_sem(key_t key,int index,int op);
int Create_sem(key_t key,int index,int op);
void init_sem(int sem,int index,int val);
void del_sem(int sem); #endif
结论:从上述分析中我们可以得知,目前PV操作的库sempv.h/sempv.c的使用步骤如下:


Linux下IPC中的信号量PV操作的更多相关文章
- 20155202 张旭 课下作业: Linux下IPC机制
20155202张旭 Linux下IPC机制 IPC机制定义 在linux下的多个进程间的通信机制叫做IPC(Inter-Process Communication),它是多个进程之间相互沟通的一种方 ...
- 20155239吕宇轩 Linux下IPC机制
20155239吕宇轩 Linux下IPC机制 - 共享内存 原理:把所有需要使用的共享数据都存放在共享内存 区域中,任何想要访问这些共享数据的进程都必须在自己的进程地址空间中新增加一块内存区域,用来 ...
- Linux下IPC机制
Linux下IPC机制 实践要求 研究Linux下IPC机制:原理,优缺点,每种机制至少给一个示例,提交研究博客的链接 共享内存 管道 FIFO 信号 消息队列 IPC 进程间通信(IPC,Inter ...
- 详解Linux下iptables中的DNAT与SNAT设置(转)
详解Linux下iptables中的DNAT与SNAT设置 这篇文章主要介绍了Linux下iptables中的DNAT与SNAT设置,是Linux网络配置中的基础知识,需要的朋友可以参考下 原文连 ...
- Linux 下的 netfilter 认识与常规操作
Linux 下的 netfilter 认识与常规操作 前言 博客写到今天,1年7个月.可是包含所有写作经历,这个时间线可以达到三年. 上次更新了一篇 "镇站之宝" ,也是本站阅读量 ...
- dos2unix,去掉Linux下文件中的^M
Windows系统下使用VS2010编写好的CPP文件,想放到Linux上进行编译.发现Linux上文件中的每行代码末尾都跟着^M这个符号. 为什么同一份文件在windows上和Linux上显示的不一 ...
- 将自己的SpringBoot应用打包发布到Linux下Docker中
目录 将自己的SpringBoot应用打包发布到Linux下Docker中 1. 环境介绍 2. 开始前的准备 2.1 开启docker远程连接 2.2 新建SpringBoot项目 3. 开始构建我 ...
- Linux下Oracle中SqlPlus时上下左右键乱码问题的解决办法
window下的sqlplus可以通过箭头键,来回看历史命令,用起来非常的方便. 但是在Linux下,会出现各种乱码,非常不方便,如下图所示,每次打错一个字符就需要重新打一遍. 解决办法:rlwrap ...
- [转] linux下shell中使用上下键翻出历史命名时出现^[[A^[[A^[[A^[[B^[[B的问题解决,Linux使用退格键时出现^H解决方法
[From] https://www.zmrbk.com/post-2030.html https://blog.csdn.net/suifengshiyu/article/details/40952 ...
随机推荐
- Ceph分布式存储(luminous)部署文档-ubuntu18-04
Ceph分布式存储(luminous)部署文档 环境 ubuntu18.04 ceph version 12.2.7 luminous (stable) 三节点 配置如下 node1:1U,1G me ...
- [模板]Min_25筛
用途 快速($O(\frac{n^{3/4}}{logn})$)地计算一些函数f的前缀和,以及(作为中间结果的)只计算质数的前缀和 一般要求f(p)是积性函数,$f(p)$是多项式的形式,且$f(p^ ...
- linux虚拟机 在install yum时提示无法获得锁 var/lib/dekg/lock时该如何解决?
起因 在新虚拟机中使用yum命令时提示要安装,安装过程中提示出错. 问题 在sudo apt install yum时提示下列错误该如何解决? E: 无法获得锁 /var/lib/dpkg/lock ...
- Ubuntu 服务器上面--安装和配置mysql 【转】
更新源列表 打开"终端窗口",输入"sudo apt-get update"-->回车-->"输入root用户的密码"--> ...
- 基于前后端分离的身份认证方式——JWT
什么是JWT JWT--Json web token 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准,可实现无状态.分布式的Web应用授权. 现在一般都用redis来出来token做 ...
- 彻底理解cookie,session,token
发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应, 尤其是我不用 ...
- NetSarang软件中nssock2.dll模块被植入恶意代码技术分析与防护方案
原文地址:http://blog.nsfocus.net/nssock2-dll-module-malicious-code-analysis-report/ NetSarang是一家提供安全连接解决 ...
- CentOS Linux安装python3
本文的方法是在CentOS上新装了python3,如果本机安装了python2则保留,因为可能有程序依赖目前的python2环境,比如yum!!!!! 一.安装python3.7 1. 安装依赖环境 ...
- maven多个web模块进行合并
原文地址: https://blog.csdn.net/u011666411/article/details/77160907
- Codeforces Round #545 (Div. 2) C. Skyscrapers 离散化+贪心
题目链接 给你一个n∗m的矩阵res,让你输出一个n∗m的矩阵a,这个矩阵满足:给你一个n*m的矩阵res,让你输出一个n*m的矩阵a,这个矩阵满足:给你一个n∗m的矩阵res,让你输出一个n∗m的矩 ...