io+day8

#ifndef __SEM2 #define __SEM3 4 //声明一个创>5 int init_sem(6 7 //声明一个p操8 int P(int sem9 10 //声明一个v操11 int W(int sem12 13 //声明一个删>14 int del_sem(i15 16 #endif
1 #include <myhead.h> 2 union semun {3 int val; /* Value for SETVAL */4 struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */5 unsigned short *array; /* Array for GETALL, SETALL */6 struct seminfo *__buf; /* Buffer for IPC_INFO7 (Linux-specific) */8 };9 //信号灯集里每个信号灯的初始化10 int sem_value(int semid,int semno,int semvalue)11 {12 union semun us;13 us.val=semvalue;14 if(semctl(semid,semno,SETVAL,us)==-1)15 {16 perror("semctr");17 return -1;18 }19 return 0;20 }21 //创建信号灯集并初始化函数22 int init_sem(int semnum)23 {24 //1.创建一个key钥匙25 key_t key;26 if((key=ftok("/",'t'))==-1)27 {28 perror("ftok");29 return -1;30 }31 //2.创建一个信号灯集32 int semid;33 if((semid=semget(key,semnum,IPC_CREAT|IPC_EXCL|0664))==-1)34 {35 if(errno==EEXIST)36 {37 //防止多进程同时调用时多次初始化38 semid=semget(key,semnum,IPC_CREAT|0664);39 return semid;40 }41 perror("semget");42 return -1;43 }44 //3.信号灯集初始化45 for(int i=0;i<semnum;i++)46 {47 if(i==0)48 {49 //参数1:id50 //参数2:初始化的信号灯编号51 //参数3:初始化的信号灯的value值52 sem_value(semid,i,1);53 }54 else55 {56 sem_value(semid,i,0);57 }58 }59 return semid;60 }61 62 //p操作函数63 int P(int semid,int semno)64 {65 struct sembuf buf;66 buf.sem_num=semno;//灯集里灯编号67 buf.sem_op=1; //释放资源68 buf.sem_flg=0; //阻塞69 if(semop(semid,&buf,1)==-1)70 {71 perror("semop");72 return -1;73 }74 return 0;75 76 }77 //w操作函数78 int W(int semid,int semno)79 {80 struct sembuf buf;81 buf.sem_num=semno;//灯集里灯编号82 buf.sem_op=-1; //申请资源83 buf.sem_flg=0; //阻塞84 if(semop(semid,&buf,1)==-1)85 {86 perror("semop");87 return -1;88 }89 return 0;90 }91 92 //删除信号灯的函数93 int del_sem(int semid)94 {95 if(semctl(semid,0,IPC_RMID,0)==-1)96 {97 perror("semctl");98 return -1;99 }
100 return 0;
101 }
1 #include <myhead.h>2 #include "sem.h"3 int main(int argc, const char *argv[])4 {5 //创建钥匙6 key_t key=-1;7 if((key=ftok("/",'c'))==-1)8 {9 perror("ftok");10 return -1;11 }12 //创建共享享内存13 int shmid; 14 if((shmid=shmget(key,4096,IPC_CREAT|0664))=15 {16 perror("shmget");17 return -1;18 } 19 //映射到用户空间20 char *adder;21 if((adder=shmat(shmid,NULL,0))==(void *)-1)22 {23 perror("shmat");24 return -1;25 } 26 //创建一个信号灯集27 int semid;28 semid=init_sem(4);29 //创建父子进程30 pid_t pid;31 pid=fork();32 if(pid<0)33 { 34 perror("fork");35 return -1;36 } 37 else if(pid>0)38 { 39 //父进程40 while(1)41 {42 //等待0信号资源43 W(semid,0);44 fgets(adder,4096,stdin);45 adder[strlen(adder)-1]='\0';46 //释放1信号资源47 P(semid,1);48 if(strcmp(adder,"quit")==0)49 {50 break;51 } 52 }53 wait(NULL);54 } 55 else 56 { 57 //子进程58 while(1)59 { 60 //等待3信号资源61 W(semid,3);62 //房子里面拿东西63 printf("共享内存数据:%s\n",adder);64 //释放2信号资源65 P(semid,2);66 if(strcmp(adder,"quit")==0)67 {68 break;69 } 70 } 71 exit(EXIT_SUCCESS);72 } 73 //取消链接74 shmdt(adder);75 return 0;76 }

相关文章:
io+day8
#ifndef __SEM2 #define __SEM3 4 //声明一个创>5 int init_sem(6 7 //声明一个p操8 int P(int sem9 10 //声明一个v操11 int W(int sem12 13 //声明一个删>14 int del_sem(i15 16 #endif 1 #include <myhead.h> …...
【图像处理:OpenCV-Python基础操作】
【图像处理:OpenCV-Python基础操作】 1 读取图像2 显示图像3 保存图像4 图像二值化、灰度图、彩色图,像素替换5 通道处理(通道拆分、合并)6 调整尺寸大小7 提取感兴趣区域、掩膜8 乘法、逻辑运算9 HSV色彩空间,获取特定…...
Java 简单实现一个 TCP 回显服务器
文章目录 TCP 服务端TCP 客户端实现效果TCP 服务端(实现字典功能)总结 TCP 服务端 package network;import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Soc…...
邦芒攻略:新手求职面试需要准备的材料
新手求职面试需要准备的材料,求职材料是求职者写给用人单位的信,目的是让对方了解自己,准备好充足的资料和自信的心态会让面试通过的几率大大增强,那么应聘者需要准备的材料呢,来看看吧。 1、求职信。也是求职者…...
在docker下安装suiteCRM
安装方法: docker-hub来源:https://hub.docker.com/r/bitnami/suitecrm curl -sSL https://raw.githubusercontent.com/bitnami/containers/main/bitnami/suitecrm/docker-compose.yml > docker-compose.yml//然后可以在docker-compose.yml文件里修…...
【Python大数据笔记_day08_hive查询】
hive查询 语法结构: SELECT [ALL | DISTINCT] 字段名, 字段名, ... FROM 表名 [inner | left outer | right outer | full outer | left semi JOIN 表名 ON 关联条件 ] [WHERE 非聚合条件] [GROUP BY 分组字段名] [HAVING 聚合条件] [ORDER BY 排序字段名 asc | desc] [CLUSTE…...
魔众文库系统 v5.6.0 DWG文件格式支持,部分数据封面显示异常,定时调度清理临时文件
魔众文库系统基于文档系统知识,建立平台与领域,打造流量、用户、付费和变现的闭环,帮助您更好的搭建文库系统。 魔众文库系统发布v5.6.0版本,新功能和Bug修复累计17项,DWG文件格式支持,部分数据封面显示异…...
2023 PostgreSQL 数据库生态大会:解读拓数派大数据计算系统及其云存储底座
11月3日-5日,由中国开源软件推进联盟 PostgreSQL 分会主办的中国 PostgreSQL 数据库生态大会在北京中科院软件所隆重举行。大会以”极速进化融合新生”为主题,从线下会场和线上直播两种方式展开,邀请了数十位院士、教授、高管和社群专家&…...
Android10 手势导航
种类 Android10 默认的系统导航有三种: 1.两个按钮的 2.三个按钮的 3.手势 它们分别对应三个包名 frameworks/base/packages/overlays/NavigationBarMode2ButtonOverlay frameworks/base/packages/overlays/NavigationBarMode3ButtonOverlay frameworks/base/packa…...
Pinia 插件 pinia-plugin-persist 添加 persist 属性时报错:没有与此调用匹配的重载
项目场景: Vue3TS 语言Pinia插件:pinia-plugin-persist 问题描述 代码如下: import { defineStore } from piniaexport const useInfoStore defineStore(info, {state: () > {return {activeIndex: 0}},actions: {updateIndex(active…...
Django知识
目录 一.request对象方法 1.request.method 2.request.POST 3.request.GET 4.request.FILES 5.request.path 二.FBV与CBV引入 1.FBV 2.CBV (1)路由 (2)视图 3.详解 (1)FBV (2)CBV (3)小结 三.CBV源码剖析 1.as_view方法 (1)路由对应函…...
vue2+antd——实现权限管理——js数据格式处理(回显+数据结构渲染)
vue2antd——实现权限管理——js数据格式处理 效果图如下:1.需求说明2.如何展开所有子项及孙子项目——在弹窗之前就获取树形结构,然后直接将数据传到弹窗中3.template部分代码4.script的data部分5.权限tree数据处理——将row中的权限分配到具体的value参…...
ffmpeg 4.4 cenc-aes-ctr 加解密 MP4 工程性质分析
目录 一、cenc-aes-ctr 原理介绍 二、显式 cenc-aes-ctr 和隐式 cenc-aes-ctr 三、加密工具---ffmpeg 四、播放---ffplay 五、总结 一、cenc-aes-ctr 原理介绍 加密算法:CENC-AES-CTR 使用 AES(Advanced Encryption Standard&…...
网络安全/黑客技术(0基础入门到进阶提升)
前言 前几天发布了一篇 网络安全(黑客)自学 没想到收到了许多人的私信想要学习网安黑客技术!却不知道从哪里开始学起!怎么学 今天给大家分享一下,很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习…...
栈的三道oj【C++】
栈和队列的相关oj 最小栈思路解决代码 栈的压入弹出序列思路解决代码 逆波兰表达式思路:解决代码 这里就挑了三道题用来熟悉栈 最小栈 力扣链接 咱们已经是高贵的C使用者了,不用像C语言一样从头开始造轮子了 这里我们调用了stack后,就会发…...
AI大模型低成本快速定制法宝:RAG和向量数据库
文章目录 1. 前言2. RAG和向量数据库3. 论坛日程4. 购票方式 1. 前言 当今人工智能领域,最受关注的毋庸置疑是大模型。然而,高昂的训练成本、漫长的训练时间等都成为了制约大多数企业入局大模型的关键瓶颈。 这种背景下,向量数据库凭借其独特…...
文旅媒体有哪些?如何邀请到现场报道?
传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 中国文旅产业在近年来得到了持续而快速的发展。从产业端看,中国文旅产业呈现出新的发展趋势,其中“文旅”向“文旅”转变成为显著特点。通过产业升级和空间构建&a…...
搭建知识付费系统的最佳实践是什么
在数字化时代,搭建一个高效且用户友好的知识付费系统是许多创业者和内容创作者追求的目标。本文将介绍一些搭建知识付费系统的最佳实践,同时提供一些基本的技术代码示例,以帮助你快速入门。 1. 选择合适的技术栈: 搭建知识付费…...
计算机视觉:使用opencv实现车牌识别
1 引言 汽车车牌识别(License Plate Recognition)是一个日常生活中的普遍应用,特别是在智能交通系统中,汽车牌照识别发挥了巨大的作用。汽车牌照的自动识别技术是把处理图像的方法与计算机的软件技术相连接在一起,以准…...
用封面预测书的价格【图像回归】
今天,我将介绍计算机视觉的深度学习应用,用封面简单地估算一本书的价格。 我没有看到很多关于图像回归的文章,所以我为你们写这篇文章。 距离我上一篇文章已经过去很长时间了,我不得不承认,作为一名数据科学家&#x…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
