【Linux开发二】数字反转|除数累加|差分数组|vector插入和访问|小数四舍五入及向上取整|矩阵逆置|基础文件IO|深入文件IO

1.数字反转

当需要将一个实数进行反转时,我们可以使用c++提供给我们的库函数to_string将实数转化成字符串,然后对于实数的反转就可以想到原来在前面(高位)的现在要放到后面(低位),即该逻辑就是栈的先进后出逻辑,所以我们可以使用栈适配器来对该字符串进行处理入栈后从栈顶元素进行访问,然后以乘以10即乘以进制基数对低位进行提升记录符号位然后处理即可得到最后的数。

2.除数累加

对于一个需要进行一个累加然后与条件进行判断的逻辑,如果我们的累加数是一定的或者有逻辑如等差或等比,则我们可以先求出需要的累加次数即用该比较条件求出累加次数,然后进行整体处理然后再进行循环可以减少循环次数,提高效率。

3.差分数组

有范围覆盖问题时,如果直接使用数组将该范围的数全部表示出来然后一个一个进行处理则处理次数会很多而若虚化范围里面的数据直接对边界进行讨论的话逻辑会更麻烦。所以使用差分数组既没有虚化边界内部的数据也不用对范围内的数据一个一个进行处理而是直接通过边界变化的差值浮动来反映该范围内的数据的变化,最后进行统计时直接使用求和即可滤除到被去掉的边界范围内的值

4.vector的插入和访问

vector是c++标准库提供的一个数据结构容器,底层是一个可扩容的数组。所以我们对vector内部的元素进行插入时就要使用到insert或者emplace,而不像一定大小的数组一样直接通过下标进行赋值。要访问vector内部的元素则可以像数组一样使用下标进行访问

5.小数的四舍五入及向上取整

对于小数的四舍五入,若我们直接对小数进行整形的强转则会对整数部分进行截断舍弃到小数部分而不能实现四舍五入,所以我们可以通过给小数加上0.5再取其进行整形强转即可实现四舍五入则就是边界值的充分利用。

对于向上取整,同样我们直接对整数相除后的小数进行整形的强转则一样会对整数部分进行截断并没有向上取整的效果,所以我们可以通过给被除数加上除数减1然后再对求得的结果进行取整就可以实现向上取整,利用整数差一向上进位的边界条件来进行向上取整。

6.矩阵逆置

矩阵的逆置实现只需要通过二维数组的行列对调即可实现,但是若要进行变转置边进行输出就不仅需要矩阵进行逆置还需要对遍历方式进行转化,所要实现矩阵逆置且遍历也逆置只需要对原来数组的行列遍历转化为列行遍历即可。

7.基础文件IO

open函数,作用:打开一个文件。参数:第一个参数为要打开文件的路径,第二个参数一些标志位比如这个文件的可读可写权限、文件不存在是否创建、向文件写内容时是否追加写存在文件报错、是否在打开文件时对文件发生截断等,第三个参数为当第二个参数是没有文件则创建时需要给出创建文件的权限。返回值:当打开文件失败时返回-1,打开文件成功时则返回文件描述符

close函数,作用:关闭一个文件。参数:参数为需要关闭的文件的文件描述符。返回值:成功返回0,失败返回-1。当该程序进程结束后若系统发现该程序打开的文件没有进行关闭时,系统也会将该打开的文件进行关闭,但是对于一个良好的编程风格我们是需要进行显式的条用close的。

write函数,作用:向一个打开的文件中写入指定内容。参数:第一个参数要写入内容的文件描述符,第二个参数是要写入的内容,第三个参数要写入的内容的字节数。返回值:失败返回-1成功返回成功写入文件的字节数

read函数,作用:从一个打开的文件中读取内容。参数:第一个参数要读取内容的文件描述符,第二个参数是存放读取的内容的空间,第三个参数要读取的内容的字节数。返回值:失败返回-1,成功返回要成功读取的字节数

lseek函数,作用:用来调整文件读写指针的位置。参数:第一个要调整文件读写指针的位置的文件描述符,第二个参数是相对于参数三的偏移量可正可负,第三个参数调整文件读写指针的一个基准三个宏值分别是文件的头部、文件的尾部、文件读写指针当前位置。返回值:返回当前调整后文件读写指针相较于文件头部的偏移字节数。通过lseek可以用来计算一个文件的大小

8.深入文件IO

我们的静态文件都是存放在磁盘中的,扇区(sector)是磁盘存储的基本单元,但是对于磁盘的读写是基于块(block)进行的一般一个块包含多个扇区这样使得磁盘操作更加有效。磁盘被分为两个区域一个是数据区存储文件内容,一个是管理表项也称为inode区inode表,下图可以形象的表示出来:

其中inode表中的inode123等称为inode节点,inode节点里面存储着对应文件的很多信息当然也保存对应文件的地址通过里面的信息就可以找到存储在数据区中的文件内容。PCB即进程控制块,在该结构里面有一个文件描述符表,文件描述表里面存放的内容一个是该进程打开的文件的文件描述符和一个指向文件表的指针,通过指针可以访问到对应的文件表,文件表里面又存储着关于该进程打开文件的信息比如读写指针偏移量inode指针等其中inode指针又指向了inode表中的inode节点通过此就可以访问到文件内容啦。见下图:

在linux中许多的系统调用和库函数一般都会有一个errno错误编号,在系统调用或库函数错误返回时会先对该错误编号进行设置,我们通过错误编号中对应的错误信息就可以知道调用和库函数失败的原因是什么,对于错误信息的输出我们可以通过strerror函数和perror函数来进行输出,perror有一个参数是一个字符串相当于我们使用者对该错误信息的一个补充描述。空洞文件,对于文件中没有数据的区域我们称之为空洞,有空洞的文件我们称为空洞文件。当我们使用ls来显示空洞文件的大小时空洞区域的字节数也会进行显示因为ls显示的文件大小为文件的逻辑大小,但是我们使用du来显示文件大小时空洞区域的字节数不会显示因为du显示的是文件实际存储在磁盘中的大小。空洞文件的形成可以通过lseek调整读写指针位置后形成无数据区来形成。空洞文件在多线程或多进程同时对同一个文件写入数据中应用。

当同一个文件被多次打开时,在PCB中的文件描述符表中就会有多个文件描述符来指向同一个文件,文件描述符的分配规则是从未被使用的最小非负整数作为该文件的文件描述符。通过open多次打开同一个文件获取的文件描述符在PCB中的文件描述符表中的文件描述符对应的文件表是不同的所以有着不同的文件信息如文件状态、读写指针偏移量。如下图:

文件描述符可以被复制,当一个文件描述符被复制后在PCB的文件描述符表中会产生一个新的文件描述符,两个描述符对应的文件表是同一个文件表,所以复制出的文件描述符对应的文件的信息和被复制的文件信息一样且共享。文件描述符的复制可以使用dup函数和dup2函数以及后面要说到的fnctl函数。dup函数参数是需要复制的文件描述符,返回值为失败返回-1成功返回文件描述符。dup2函数参数是需要复制的文件描述符及指定新的文件描述符的值,但是对于指定的文件描述符若已经被使用则不会将指定的值作为新的文件描述符而是取比该值大的没有被使用的最小整数作为新的文件描述符,返回值同dup一样。如下图:

多个独立的文件读写单元对同一个文件进行操作时发生文件共享,文件共享的常见情况有多个进程间使用open打开同一个文件同一个进程多个线程间使用open打开同一个文件或复制同一个文件的文件描述符。三种常见情况如下图:

多个进程间使用open打开同一个文件

同一进程多个线程间使用open打开同一个文件

同一进程多个线程间复制同一个文件的文件描述符

竞争冒险指的是当文件共享时各个独立的文件读写单元发生的冲突问题。如下图的情况:

原子操作可以解决竞争冒险,原子操作指的是一系列不会被分割的操作,具体的标志就有O_APPEND,pread和pwrite函数,O_EXCL。对于上图中竞争冒险的发生就可以在打开文件时使用O_APPEND标志来解决,当open中使用了该参数后,移动读写指针到文件末尾和write操作就成为了原子操作不会被分开就可以在多进程间成功的在文件内容的末尾对文件进行追加写,需要注意的时该指针的移动只会对写文件有用对读文件还是会从文件的头部开始pread和pwrite函数和read及write函数一样都是对文件内容进行读写不同的是pread和pwrite比其多了一个偏移量参数用来移动读写指针,且移动读写指针的操作和读写操作成为了一个原子操作O_EXCL则通常与O_CREAT一起使用用来将判断文件是否存在和创建文件组合成一个原子操作

truncate函数和ftruncate函数是用来截断文件的,truncate函数的参数是文件路径和需要截断文件的字节数,返回值失败返回-1并设置errno当然对于大多数Linux下的系统调用和库函数失败都会有error的设置成功返回0。ftruncate函数的参数其中只是将文件路径换成了文件描述符

fnctl函数参数是文件描述符及一些对应的功能的宏,最后一个参数是根据传入的相应功能的函数来进行参数传递的是一个可变参。返回值失败都是返回-1成功则根据第二个参数的功能选择来进行返回。主要的两个功能是对文件描述符的复制功能类似于dup2,获取或设置文件的状态,对于文件状态的设置即open函数的第二个参数但是也只是一部分可以设置如O_APPEND。ioctl函数第一个参数也是文件描述符,第二个参数是与操作的对象有关第三个参数也是根据第二个参数来传递的可变参,返回值也是根据第二个参数来返回的。主要功能是用于操作特殊文件或者硬件外设

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1191916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭秘未来!智能资源规划AI系统,AI应用架构师的未来发展

揭秘未来!智能资源规划AI系统与AI应用架构师的未来发展 1. 引言:未来企业的资源规划困境与智能革命 1.1 传统资源规划的“生存危机” 想象一下: 某汽车制造商按照传统ERP的静态规划采购了1000吨钢材,结果疫情突然爆发,…

成本大降!自建识别系统年省超15万元

成本大降!自建识别系统年省超15万元 1. 引言:为什么你的图像识别成本还能再砍70%? 你有没有算过一笔账?如果你的企业每天要处理10万张图片识别任务,用市面上主流的商用视觉API,一年光调用费用就接近18万元…

Listing评分仅38分?DeepBI是如何让ACOS从62%降至24%的?

做亚马逊的你是否也陷在高ACOS泥潭里?深圳一位美国站点工具类目卖家,就曾深陷此境:接入DeepBI前,月度广告ACOS高达62.49%,经营举步维艰。但仅用三个月,他就实现逆袭——ACOS稳控23.86%,TACOS低至…

西北工业大学 StereoMV2D 突破 3D 物体检测深度难题,精度与效率兼得

西北工业大学 StereoMV2D 突破 3D 物体检测深度难题,精度与效率兼得 论文标题:StereoMV2D: A Sparse Temporal Stereo-Enhanced Framework for Robust Multi-View 3D Object Detection 作者团队:西北工业大学、苏州科技大学 发布时间&#…

麦橘超然版本回退方法:rollback操作步骤

麦橘超然版本回退方法:rollback操作步骤 1. 引言与背景说明 你是否在使用“麦橘超然”图像生成控制台时,遇到了新版本不稳定、生成效果变差或功能异常的问题?别担心,本文将为你详细讲解如何对 麦橘超然(MajicFLUX&am…

万物识别模型稳定性测试:长时间运行GPU内存泄漏排查

万物识别模型稳定性测试:长时间运行GPU内存泄漏排查 1. 引言:为什么我们要做稳定性测试? 你有没有遇到过这样的情况:一个图像识别模型刚开始运行时速度飞快,结果准确,但跑着跑着就越来越慢,甚…

抠图速度慢?GPU加速的cv_unet镜像提速秘籍

抠图速度慢?GPU加速的cv_unet镜像提速秘籍 你是不是也遇到过这种情况:急着出图,上传一张人像准备抠背景,结果等了十几秒还没出结果?或者批量处理几十张商品图时,进度条走得分外艰难?别急&#…

2026年CV领域入门必看:YOLO11开源模型+弹性GPU部署指南

2026年CV领域入门必看:YOLO11开源模型弹性GPU部署指南 你是不是也正为计算机视觉项目找不到高效又易用的模型而头疼?尤其是刚入门时,面对复杂的环境配置、漫长的训练流程和难以调试的代码,很容易就打退堂鼓。别急——2026年&…

Paraformer-large二次开发指南:自定义界面与功能扩展教程

Paraformer-large二次开发指南:自定义界面与功能扩展教程 1. 快速上手与核心功能解析 你是不是已经用过Paraformer-large语音识别镜像,但觉得默认的Gradio界面不够贴合你的业务需求?或者你想给它加个日志导出、批量处理、多语种切换的功能&…

为什么选择Paraformer-large?离线语音识别部署入门必看指南

为什么选择Paraformer-large?离线语音识别部署入门必看指南 在语音转文字的应用场景中,准确率、响应速度和是否支持长音频是决定体验的关键因素。如果你正在寻找一个高精度、可本地部署、无需联网调用API的中文语音识别方案,那么阿里达摩院开…

PyTorch镜像适合教学?高校课程环境批量部署案例

PyTorch镜像适合教学?高校课程环境批量部署案例 1. 引言:为什么高校AI课程需要统一开发环境? 在高校开设深度学习、人工智能相关课程时,一个常见但棘手的问题是:学生本地环境五花八门,配置过程耗时耗力&a…

CAM++生产环境部署:高并发下稳定性优化实战

CAM生产环境部署:高并发下稳定性优化实战 1. 引言:为什么需要在生产环境优化CAM 你可能已经试过本地运行CAM说话人识别系统,上传两个音频、点击验证,几秒内就出结果——简单又高效。但当你把它放到真实业务场景中,比…

学习日记day62

Day62_0119专注时间:目标是:5h30~6h。实际:4h17min每日任务:饭后的休息(25min),学习间歇的休息(15min)都用手表计时器来监督{step1}40min二刷1道力扣hot100昨天的题再做一…

教育场景应用:老师卡通形象吸引学生注意

教育场景应用:老师卡通形象吸引学生注意 在日常教学中,你有没有遇到过这样的情况:刚上课时学生眼神发散、注意力不集中,讲到重点时后排同学低头刷手机,互动提问环节只有前排三两个人举手?这并不是学生不认…

Glyph语音转图像?跨模态能力边界测试部署指南

Glyph语音转图像?跨模态能力边界测试部署指南 1. Glyph不是语音转图像,而是视觉推理的新范式 你可能被标题吸引了——“Glyph语音转图像”?听起来像是某种黑科技,能把声音直接变成画面。但真相是:Glyph 并不支持语音…

Z-Image-Turbo Gradio界面定制:修改UI提升用户体验

Z-Image-Turbo Gradio界面定制:修改UI提升用户体验 Z-Image-Turbo_UI界面是基于Gradio构建的交互式图像生成平台,旨在为用户提供直观、高效的操作体验。默认界面虽然功能完整,但在实际使用中,用户对布局美观性、操作便捷性和视觉…

实测对比Z-Image-Turbo和SDXL:速度差距太明显

实测对比Z-Image-Turbo和SDXL:速度差距太明显 1. 引言:为什么这次实测值得关注? 你有没有遇到过这种情况:输入一段精心设计的提示词,然后盯着进度条,等了整整30秒才看到结果?在AI图像生成领域…

Qwen3Guard-Gen-8B冷启动问题:缓存预加载解决方案

Qwen3Guard-Gen-8B冷启动问题:缓存预加载解决方案 1. 引言:为什么你刚启动模型就卡住了? 如果你正在使用 Qwen3Guard-Gen-8B 进行内容安全审核,可能会遇到这样一个问题:第一次请求响应特别慢,甚至长达十几…

小白也能懂的视觉大模型:GLM-4.6V-Flash-WEB保姆级教程

小白也能懂的视觉大模型:GLM-4.6V-Flash-WEB保姆级教程 你是不是也经常看到“多模态大模型”“视觉理解”这类词,觉得高深莫测?总觉得这些技术需要顶级显卡、复杂配置、一堆命令行操作,离自己很远? 今天我要告诉你&a…

如何通过读文献寻找科研思路?

作为一名研究生,当你踏入实验室的那一刻,最常面临的焦虑往往不是实验做不出来,而是根本不知道该做什么实验。导师给的方向太宽泛,师兄师姐的建议太碎片化,面对浩如烟海的学术资源,你是否也曾在深夜对着电脑…