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

IO进程线程复习

文件IO和标准IO的区别

文件IO:

        1.系统提供的用于输入输出的函数

        2.有文件描述符0,1,2

        3.open,close,puts,gets

        4.可以操作任意类型的文件,不能操作目录

        5.无缓存机制

标准IO:

        1.C库提供的用于输入输出的函数

        2.有文件流,stdin,stdout,stderr

        3.fopen,fclose,fputs,fgets

        4.只能操作普通文件和其他部分类型文件

        5.有缓存机制

进程有哪五态

        创建态 就绪态 运行态 消亡态 阻塞态

什么时候刷新缓存区

        换行、缓冲区溢出、输入输出切换、缓冲区刷新函数fflush、程序结束、关闭标准输入流标准输出流指针

行缓存和全缓存的区别

        全缓存换行不会刷新缓冲区

进程模板

int main()
{pid_t pid=fork();if(pid>0)//父进程{}else if(pid==0)//子进程{}else{perror("fork");}return 0;}

如何实现同步

        无名信号、互斥锁+条件变量

如何实现异步通讯

        管道,消息队列,共享内存,信号灯集,套接字,信号

消费者模型(参考写法不唯一)

pthread_mutex_t mt1;
pthread_cond_t cond1;
int n=0;void* producer(void* arg)
{for(int i=0;i<5;i++){pthread_mutex_lock(&mt1);printf("生产了一台特斯拉%d\n",n);n++;pthread_cond_signal(&cond1);pthread_mutex_unlock(&mt1);sleep(5);}}
void* consumer(void* arg)
{pthread_mutex_lock(&mt1);pthread_cond_wait(&cond1,&mt1);   printf("购买了一台特斯拉\n");sleep(10);pthread_mutex_unlock(&mt1);}int main()
{   pthread_mutex_init(&mt1,NULL);pthread_cond_init(&cond1,NULL);pthread_t ti;pthread_t tid[5];ti=pthread_create(&ti,NULL,producer,NULL);if(ti!=0){perror("pthread_create");return -1;}for(int i=0;i<5;i++){tid[i]=pthread_create(&tid[i],NULL,consumer,NULL);if(tid[i]!=0){perror("pthread_create");return -1;}}pthread_join(ti,NULL);for(int i=0;i<5;i++){pthread_join(tid[i],NULL);}pthread_mutex_destroy(&mt1);pthread_cond_destroy(&cond1);return 0;
}

消息队列

//发送
typedef struct
{long type;char text[248];
}msg;int main(argc,argv[])
{if(argc!=2){return -1;}int type=atoi(argv[1]);key_t key=ftok("./ipc",1);int id=msgget(id,IPC_CREAT|0666);while(1){msg buff={0};scanf("%247s",&buff.text);while(getchar()!=10);       msgsnd(id,&buff,strlen(buff.text),0);}return 0;
}//接收
typedef struct
{long type;char text[248];
}msg;int main(argc,argv[])
{key_t key=ftok("./ipc",1);int id=msgget(id,IPC_CREAT|0666);while(1){msg buff={0};int type=-1;scanf("%d",&type);while(getchar()!=10);buff.type=type;msgrcv(id,&buff,248,type,IPC_NOWAIT|020000);}return 0;
}

共享内存

//输出
typedef struct
{char text[256];
}shm;
shm* addr=NULL;
int id=-1;
void handler(int sign)
{shmdt(addr);shmctl(id,IPC_RMID,NULL);exit(0);
}
int main()
{signal(SIGINT,handler);key_t key=ftok("./ipc",1);id=shmget(key,sizeof(shm),IPC_CREAT|0666);addr=shmat(id,NULL,0);while(1){printf("%s\n",addr->text);memset(addr,0,sizeof(addr));sleep(1);}return 0;
}//写入
typedef struct
{char text[256];
}shm;
shm* addr=NULL;
int id=-1;
void handler(int sign)
{shmdt(addr);shmctl(id,IPC_RMID,NULL);exit(0);
}
int main()
{signal(SIGINT,handler);//ctr+c 暂停key_t key=ftok("./ipc",1);id=shmget(key,sizeof(shm),IPC_CREAT|0666);addr=shmat(id,NULL,0);while(1){scanf("%255s",addr->text);while(getchar()!=10);sleep(1);}return 0;
}

相关文章:

IO进程线程复习

文件IO和标准IO的区别 文件IO: 1.系统提供的用于输入输出的函数 2.有文件描述符0&#xff0c;1&#xff0c;2 3.open,close,puts,gets 4.可以操作任意类型的文件&#xff0c;不能操作目录 5.无缓存机制 标准IO&#xff1a; 1.C库提供的用于输入输出的函数 2.有文件流&#xf…...

Mybatis初步了解

mysql缓存&#xff1a;根据sql语句进入缓存&#xff0c;如果sql语句多加一个空格就进入不到同一个缓存&#xff0c;另外数据库数据发生了更新&#xff0c;缓存中的数据不会同步。 延迟加载&#xff1a;先查询基本信息&#xff0c;再查询其他信息&#xff0c;而不是一次就查询出…...

基于PyQt设计的智能停车管理系统

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】设计意义【4】国内外研究现状【6】摘要1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】VSCODE【2】python【3】ptqt【4】HyperLPR31.5 参考文献二、安装Python环境1.1 环境介绍**1.2 Python版本介…...

linux系统中的 scp的使用方法

SCP&#xff08;Secure Copy Protocol&#xff09;是一种通过加密的方式在本地主机和远程主机之间安全地传输文件的协议。 它是基于SSH协议的扩展&#xff0c;允许用户在不同主机之间进行文件复制和传输&#xff0c;是Linux和Unix系统中常用的工具之一。 在嵌入式Linux软件的…...

短连接项目01---基本框架的搭建和测试运行

文章目录 1.什么是短链2.仓库的创建3.项目的创建4.配置文件的修改5.三个模块的创建5.1如何创建5.2类型的选择5.3包的完善 6.yml文件的配置7.启动类的测试8可能会出现的问题 1.什么是短链 下面的这个就是一个长的url&#xff0c;我们的短链里面的链就是链接&#xff0c;也就是我…...

Unity阿里云OpenAPI 获取 Token的C#【记录】

获取Token using UnityEngine; using System; using System.Text; using System.Linq; using Newtonsoft.Json.Linq; using System.Security.Cryptography; using UnityEngine.Networking; using System.Collections.Generic; using System.Globalization; using Cysharp.Thr…...

2023年吉林省职业院校技能大赛网络系统管理样题-网络配置(华三代码)

目录 附录1:拓扑图 附录2:地址规划表 1.S1 2.S3 3.S4 4.S5 5.S7 6.S8 7.S9 8.R1 9.R2 10.R3 11.EG1 12.EG2 13.AC1 14.AC2 附录1:拓扑图 编号 型号...

WSL 安装cuDNN

WSL 安装cuDNN 参考文档&#xff1a;https://docs.nvidia.com/deeplearning/cudnn/installation/latest/linux.html#verifying-the-install-on-linux 1. 下载相应包 根据下方下载地址进入下载界面&#xff0c;并选择与自己电脑相对应的平台执行图中的命令 下载地址&#xff1…...

SSRF漏洞学习总结

一、SSRF漏洞 1.原理 SSRF&#xff08;Server-Side Request Forgery&#xff0c;服务器端请求伪造&#xff09;是一种安全漏洞&#xff0c;攻击者利用这个漏洞可以诱使服务器端发起由攻击者构造的请求。这种攻击通常发生在应用接受来自用户的输入&#xff0c;并且该输入用于构…...

stack 和 queue容器的介绍和使用

1.stack的介绍 1.1stack容器的介绍 stack容器的基本特征和功能我们在数据结构篇就已经详细介绍了&#xff0c;还不了解的uu&#xff0c; 可以移步去看这篇博客哟&#xff1a; 数据结构-栈数据结构-队列 简单回顾一下&#xff0c;重要的概念其实就是后进先出&#xff0c;栈在…...

Windows中本地组策略编辑器gpedit.msc打不开/微软远程桌面无法复制粘贴

目录 背景 解决gpedit.msc打不开 解决复制粘贴 剪贴板的问题 启用远程桌面剪贴板与驱动器 重启RDP剪贴板监视程序 以上都不行&#xff1f;可能是操作被Win11系统阻止 最后 背景 远程桌面无法复制粘贴&#xff0c;需要查看下主机策略组设置&#xff0c;结果按WinR输入…...

(2023 RESS ) Federated multi-source domain adversarial adaptation framework

&#x1f4da; 研究背景与挑战 机械设备的故障诊断对于保障生产效率和安全至关重要。传统的智能诊断方法依赖于大量的训练数据&#xff0c;但在实际工业场景中&#xff0c;数据收集受到经济和时间因素的限制。更棘手的是&#xff0c;由于行业竞争和隐私安全问题&#xff0c;不…...

Java实现FIFO缓存策略实战

实现FIFO模型选择FIFO模型实现过程FIFO模型完整代码下面看一下先进先出的示例过程总结FIFO(First In First Out,先进先出)策略是一种基本的数据处理和存储管理方法,在Java中,这种策略通常用于管理那些需要按照顺序处理的数据项,比如任务的队列、数据的传输缓冲区等。在Ja…...

虚幻基础07:蓝图接口

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 作用原理事件函数 作用 实现对象间的通知。 A 通知 B 做什么。 原理 将接口抽象为蓝图&#xff0c;使得任意蓝图都能直接访问。 只需要再传入对象地址&#xff0c;就能执行对象的功能。 事件 黄色&#xff1a;…...

978.最长湍流子数组

目录 题目过程解法收获 题目 给定一个整数数组 arr &#xff0c;返回 arr 的 最大湍流子数组的长度 。 如果比较符号在子数组中的每个相邻元素对之间翻转&#xff0c;则该子数组是 湍流子数组 。 更正式地来说&#xff0c;当 arr 的子数组 A[i], A[i1], …, A[j] 满足仅满足…...

Python数据分析-Python语法基础,IPython和Jupyter-Notebooks(二)

title: ‘Python数据分析:Python语法基础&#xff0c;IPython和Jupyter Notebooks&#xff08;二&#xff09;’ tags: python数据分析 categories:python数据分析 keywords:python数据分析 cover: …/img/404_icecream_whale.png description: 本文介绍python的基础语法和jup…...

Redis学习之哨兵一

一、基本概念 1.主从复制的问题&#xff1a; 一旦主节点出现故障需要手动的将一个从节点晋升为主节点同时需要修改应用方的主节点地址还需要通过命令其他节点去复制新的主节点。 主节点的写能力和存储能力受到单机的限制 2.高可用&#xff1a; 上图为一主二从的redis主从复制模…...

【C++高并发服务器WebServer】-9:多线程开发

本文目录 一、线程概述1.1 线程和进程的区别1.2 线程之间共享和非共享资源1.3 NPTL 二、线程操作2.1 pthread_create2.2 pthread_exit2.3 pthread_join2.4 pthread_detach2.5 patch_cancel2.6 pthread_attr 三、实战demo四、线程同步五、死锁六、读写锁七、生产消费者模型 一、…...

【时时三省】(C语言基础)文件的随机读写

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 fseek 根据文件指针的位置和偏移量来定位文件指针 示例&#xff1a; 这个输出的就是ade seek&#xff3f;cur的意思是从当前偏移量 2就是从a往后偏移两个就是d 偏移量 SEEK&#xff3f;CUR…...

【python】python基于机器学习与数据分析的二手手机特性关联与分类预测(源码+数据集)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 python基于机器学习与数据分析的二手手机特性关联与…...

WPF进阶 | WPF 数据绑定进阶:绑定模式、转换器与验证

WPF进阶 | WPF 数据绑定进阶&#xff1a;绑定模式、转换器与验证 一、前言二、WPF 数据绑定基础回顾2.1 数据绑定的基本概念2.2 数据绑定的基本语法 三、绑定模式3.1 单向绑定&#xff08;One - Way Binding&#xff09;3.2 双向绑定&#xff08;Two - Way Binding&#xff09;…...

java.util.Random类(详细案例拆解)(已完结)

前言&#xff1a; 小编打算近期更俩三期类的专栏&#xff0c;一些常用的专集类&#xff0c;给大家分好类别总结和详细的代码举例解释。 今天是除夕&#xff0c;小编先祝贺大家除夕快乐啦&#xff01;&#xff01; 今天是第六个 java.lang.Math 包中的 java.util.Random类 我…...

【数据结构】动态内存管理函数

动态内存管理 为什么存在动态内存管理动态内存函数的介绍&#x1f38a;malloc补充&#xff1a;perror函数&#x1f38a;free&#x1f38a;calloc&#x1f38a;realloc 常见动态内存错误对空指针的解引用操作对动态开辟空间的越界访问对非动态开辟内存使用free释放使用free释放一…...

TVM框架学习笔记

TVM是陈天齐等人一个开源的深度学习编译器栈,用于优化和部署机器学习模型到各种硬件后端。它支持多种前端框架,如TensorFlow、PyTorch、ONNX等,并且可以在不同的硬件平台上运行,包括CPU、GPU和专用加速器。官方文档: Apache TVM Documentation — tvm 0.20.dev0 documenta…...

neo4j-community-5.26.0 install in window10

在住处电脑重新配置一下neo4j, 1.先至官方下载 Neo4j Desktop Download | Free Graph Database Download Neo4j Deployment Center - Graph Database & Analytics 2.配置java jdk jdk 21 官网下载 Java Downloads | Oracle 中国 path: 4.查看java -version 版本 5.n…...

macbook安装go语言

通过brew来安装go语言 使用brew命令时&#xff0c;一般都会通过brew search看看有哪些版本 brew search go执行后&#xff0c;返回了一堆内容&#xff0c;最下方展示 If you meant "go" specifically: It was migrated from homebrew/cask to homebrew/core. Cas…...

LCD液晶屏的工作原理以及背光模组

LCD液晶屏的工作原理以及背光模组 液晶屏工作原理 像素点的主要结构背光模组 LCD液晶屏主要由两部分组成&#xff0c;液晶屏和背光模组。背光模组提供均匀稳定的光源&#xff0c;液晶屏控制光线的传播路径&#xff0c;是屏幕显示设定的图像。 液晶屏 LCD的核心是两片玻璃之间…...

es数据同步

Logstash 是 Elastic 技术栈中的一个技术&#xff0c;它是一个数据采集引擎&#xff0c;可以从数据库采集数据到 ES 中。可以通过设置 自增 ID 主键 或 更新时间 来控制数据的自动同步&#xff1a; 自增 ID 主键&#xff1a;Logstatsh 会有定时任务&#xff0c;如果发现有主键…...

maven的打包插件如何使用

默认的情况下&#xff0c;当直接执行maven项目的编译命令时&#xff0c;对于结果来说是不打第三方包的&#xff0c;只有一个单独的代码jar&#xff0c;想要打一个包含其他资源的完整包就需要用到maven编译插件&#xff0c;使用时分以下几种情况 第一种&#xff1a;当只是想单纯…...

【Elasticsearch】中数据流需要配置索引模板吗?

是的&#xff0c;数据流需要配置索引模板。在Elasticsearch中&#xff0c;数据流&#xff08;Data Streams&#xff09;是一种用于处理时间序列数据的高级结构&#xff0c;它背后由多个隐藏的索引组成&#xff0c;这些索引被称为后备索引&#xff08;Backing Indices&#xff0…...