当前位置: 首页 > news >正文

IO和进程day08(消息队列、共享内存、信号灯集)

今日任务

1.代码 

inversion.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <sys/sem.h>int main(int argc, const char *argv[])
{//创建打开共享内存//1.生成keykey_t key=ftok("./",1);if(-1==key){perror("key");return -1;}//2.获取id号int shmId=shmget(key,128,IPC_CREAT|0664);if(-1==shmId){perror("shmget");return -1;}//3.获取映射地址void* addr=shmat(shmId,NULL,0);if((void *)-1==addr){perror("shmat");return -1;}char *q=(char*)addr;//创建信号量集,共创建两灯://0:初始值为1,负责打印,打印前0号灯-1;打印结束,1号灯+1;//1:初始值为0,负责逆置,逆置前1号灯-1;逆置结束,0号灯+1;int semId=semget(key,2,IPC_CREAT|0664);if(-1==semId){perror("semId");return -1;}struct sembuf sops={0,1,0};if(-1==semop(semId,&sops,1)){perror("semop");return -1;}puts("初始化完成");struct sembuf p={1,-1,0};//1号灯-1struct sembuf v={0,1,0};//0号灯+1while(1){//逆置if(-1==semop(semId,&p,1)){perror("semop p");return -1;}//操作for (int i=0; i<strlen(q)/2; i++){char temp=*(q+i);*(q+i)=*(q+strlen(q)-1-i);*(q+strlen(q)-1-i)=temp;}if(-1==semop(semId,&v,1)){perror("semop p");return -1;}}return 0;
}

print.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <sys/sem.h>
#include <unistd.h>int main(int argc, const char *argv[])
{//创建打开共享内存//1.生成keykey_t key=ftok("./",1);if(-1==key){perror("key");return -1;}//2.获取id号int shmId=shmget(key,128,IPC_CREAT|0664);if(-1==shmId){perror("shmget");return -1;}//3.获取映射地址void* addr=shmat(shmId,NULL,0);if((void *)-1==addr){perror("shmat");return -1;}strcpy((char*)addr,"1234567");//创建信号量集,共创建两灯://0:初始值为1,负责打印,打印前0号灯-1;打印结束,1号灯+1;//1:初始值为0,负责逆置,逆置前1号灯-1;逆置结束,0号灯+1;int semId=semget(key,2,IPC_CREAT|0664);if(-1==semId){perror("semId");return -1;}struct sembuf sops={0,1,0};if(-1==semop(semId,&sops,1)){perror("semop");return -1;}puts("初始化完成");struct sembuf p={0,-1,0};//0号灯-1struct sembuf v={1,1,0};//1号灯+1while(1){//打印,if(-1==semop(semId,&p,1)){perror("semop p");return -1;}//操作sleep(1);printf("%s\n",(char*)addr);if(-1==semop(semId,&v,1)){perror("semop p");return -1;}}return 0;
}

运行结果:

今日思维导图

明日即考,量多待复,汝甚忧之

http://www.lryc.cn/news/166812.html

相关文章:

  • 【数据结构】—堆排序以及TOP-K问题究极详解(含C语言实现)
  • Python语言概述
  • 电子电路学习笔记之NCV84120DR2G——车规级单通道高压侧驱动器
  • YOLO DNF辅助教程完结
  • Hadoop-Hive
  • 竞赛 基于机器视觉的火车票识别系统
  • conda与pip镜像源环境配置
  • Golang1.21更新内容全面介绍~
  • ArcGIS 10.4安装教程!
  • 华为云云服务器云耀L实例评测 | 从零开始:华为云云服务器L实例使用教程
  • ElasticSearch配置
  • MySQL优化第二篇
  • 基于python解决鸡兔同笼问题
  • 2023 Google 开发者大会|Mobile开发专题追踪
  • 最新版WPS 2023 加载Zotero方法
  • 详解爬虫策略,反爬虫策略,反反爬爬虫策略
  • ES6中的Promise对象
  • vue 知识点———— 生命周期
  • 焊接符号学习
  • 记录linux清理空间的步骤
  • 丰田工厂停产竟然因为磁盘...
  • Python工程师Java之路(p)Maven聚合和继承
  • Java 复习笔记 - Lambda 表达式 he 经典算法题
  • 算法——快乐数
  • vue使用window.location.href 跳转失败
  • 【备忘】清理Office缓存
  • MacOS环境变量source生效但重启后又失效
  • Sql语句大全--插入
  • Unity 收取“运行费”引众怒,开源免费3D游戏引擎CGE(Castle Game Engine)吸引开发者关注
  • Apache DolphinScheduler - 快速扩展 TaskPlugin 从入门到放弃