笔记整理—内核!启动!—linux应用编程、网络编程部分(1)API概述与文件I/O

news2024/9/21 11:38:39

        文件I/O即为文件的input和output的功能。

        操作系统的API:

        

        学习操作系统的本质就是学习一个操作系统提供的API。

        常用的IO:open、close、write、read、lseek。 打开一个文件(open)得到一个文件描述符,读写文件使用(read、write、lseek),关闭文件使用(close)。

        对于linux而言,打不开文件就干不了活,使用完毕文件不进行关闭容易造成文件损坏。

        文件平日存在块设备里,通过文件系统进行管理,最底层表现为扇区。存在块设备中的未打开文件是静态文件。

        内核中在进程建立一个打开的文件数据结构,记录下整个文件。开辟申请一段内存,将静态文件读取到内存中得到一个动态文件。打开后的操作是针对内存中复制的这个文件,而不是块中的文件。close整个文件后将内存中的动态文件更新到块设备,更新静态文件。

        块设备只能按照扇区操作。不支持随机访问,要改就是改一块,内存支持随机访问,读取、更改,说是那就是那,这就是随机访问(RAM-random)。

        文件描述符的实质就是一个数字,用于区分不同的动态文件,一个程序打开,就会创建一个文件描述符,多个文件,就可以用文件描述符进行区分。

int fd=-1;
fd=open("a.txt",O_RDWR);

if(-1==fd)
{    
    printf("err\n");
}
printf("fd=%d",fd);
close(fd);

        open的文件描述符一定要保存好。

ssize_t read (int fd, void *buf, size_t count);

        fd是文件描述符,代表了是那个文件;*buf提供了一个内存的缓冲区,用于存储读取的内容;count为读取多少字节的数据。

        ssize_t是使用typedef重新定义的int类型数据,返回数据则为成功读取到的字节数。

char buf[100]={0};
int ret=-1;

ret=read(fd,buf,20);
if(-1==ret)
{
    printf("err\n");
}
else
{
    printf("ret=%d,buf=%s",ret,buf);
}
close(fd);

ssize_t write (int fd, const void * buf, size_t count);

        在fd指向的文件写入count个buf中的字节数。

char writebuf[20]=“xxxx”;
int ret=-1;

ret=write(fd,writebuf,strlen(writebuf));
if(ret<0)
{
    printf("err\n");
}
else
{
    printf("ret=%d,writebuf=%s",ret,writebuf);
}
close(fd);

        open()函数的flag:与读写权限相关,O_RDONLY只读、O_WRONLY只写、O_RDWR可读可写。打开一个有内容的文件一般会进行三种写的操作①新内容覆盖旧内容。②接续写。③写在头部。

        O_TRUNC:会使打开的文件的内容清除。

        O_APPEND接续内容。

        O_TRUNC会顶掉O_APPEND操作。

        打开文件错误时退出进程: return -1;return只能在mian中使用,所以一般使用exit\_exit\_Exit终止进程,如_exit(-1);

        打开的文件不存在:O_CREAT表示已知所打开的文件不存在,需要进行创建,创建后再打开。open("a.txt",O_RDWR|O_CREAT)。如果文件存在,则会将文件重新创建。

        使用O_EXCL和O_CREAT结合,文件存在则会报err,文件不存在则会被创建。同时使用O_CREAT创建文件时可赋予文件权值。open("a.txt",O_RDWR|O_CREAT,0666);

        O_NONBLOCK只用于设备文件,不会用于普通文件,非阻塞式,要么操作成功,要么报err,不排队不等待,保障了时间,但不保障结果,多用于dcntl函数,打开设备文件。一般情况下打开一个文件是默认为阻塞的。

        O_SYNC非阻塞式,正常没有O_SYNC的情况下,缓冲区接受完成buf会一次性写入块设备,若O_SYNC则缓冲区有一个内容就会立刻对内容进行处理,不等待buf全部进入缓冲区。正常情况下,buf会先写入缓冲区,再一次性写入设备,这对设备的寿命有利。

        error number错误码,常见的错误都有对应的错误码,当函数执行错误时,会返回一个number。errno由操作系统进行维护,os内部函数都可进行设置errno去报告对应的errno。linux提供一个函数perror去对接errno,不用传参,通过数字传递相关信息。void perror(count char *s)->perror(“文件打开错误”),打印相关错误信息的时候,会附加上错误原因的,由errno的接口才能使用perror。

        值得一提的是,如果读串口使用阻塞模式读30个字节,但只读了20个字节时,就会等待余下的10个字节,有时候传输的数据很大时,应会多次读取进行传输。

        文件的I/O指定是open、close、write等API,能干活但是效率不新,本质上系统层与应用层之间是存在差异的如count的大小。

        C库函数提供了标准I/O,fopen、fwrite等库函数,这些IO函数,是通过系统的文件IO库二次封装而来的,主要是再应用层提供了缓冲机制,fwrite的内容先进应用层buf,再根据最佳选择运输到内核buf,内核再根据最佳选择写入块设备。

        ​​​​​​​

        本质上就是为了提高传输的效率。 

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

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

相关文章

VScode快速配置c++(菜鸟版)

1.vscode是什么 Visual Stdio Code简称VS Code&#xff0c;是一款跨平台的、免费且开源的现代轻量级代码编辑器&#xff0c;支持几乎 主流开发语言的语法高亮、智能代码补全、自定义快捷键、括号匹配和颜色区分、代码片段提示、代码对比等特性&#xff0c;也拥有对git的开箱即…

2024 “华为杯” 中国研究生数学建模竞赛(D题)深度剖析|大数据驱动的地理综合问题|数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题&#xff01; CS团队倾注了大量时间和心血&#xff0c;深入挖掘解…

Java项目实战II基于Java+Spring Boot+MySQL的车辆管理系统(开发文档+源码+数据库)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 "随着…

嵌入式面试学习笔记(入门1)

目录 指针的大小问题 sizeof和strlen C语言分配内存的方式 数组&#xff08;的&#xff09;指针和指针&#xff08;的&#xff09;数组 union 指针的大小问题 指针对于不少新手而言是一道难关&#xff0c;但是不必恐惧于指针。他的本质其实就是一个地址。请冷静下来仔细思…

基于yolov8和openpose人体骨骼关键点实现的摔倒姿态识别检测系统实现

【参考源码】 GitHub - HRonaldo/Openpose_YOLO 本项目参考上面框架进行全面改进&#xff0c;改进如下&#xff1a; &#xff08;1&#xff09;将检测框架换成当前最流行框架yolov8&#xff0c;并封装成类实现模块化设计。关于yolov5优化项目可以访问&#xff1a;https://bl…

【华为杯研赛赛题】2024年中国研究生数学建模竞赛赛题已出

2024年中国研究生数学建模竞赛所有赛题已出&#xff01; A题 B题 C题 D题 E题 F题

【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL77

编写乘法器求解算法表达式 描述 编写一个4bit乘法器模块&#xff0c;并例化该乘法器求解c12*a5*b&#xff0c;其中输入信号a,b为4bit无符号数&#xff0c;c为输出。注意请不要直接使用*符号实现乘法功能。 模块的信号接口图如下&#xff1a; 要求使用Verilog HDL语言实现以上…

使用 Elasticsearch Reindex API 迁移数据

使用 Elasticsearch Reindex API 迁移数据 在 Elasticsearch 中&#xff0c;随着需求的变化&#xff0c;可能需要对索引进行重建或更新。这通常涉及创建新索引、迁移数据等步骤。本文介绍如何使用 Reindex API 将旧索引中的数据迁移到新索引中 一、步骤概述 创建新索引&#…

OpenCV_距离变换的图像分割和Watershed算法详解

在学习watershed算法的时候&#xff0c;书写代码总会出现一些错误&#xff1a; 上述代码运行报错&#xff0c;显示OpenCV(4.10.0) Error: Assertion failed (src.type() CV_8UC3 && dst.type() CV_32SC1) in cv::watershed 查找资料&#xff1a;目前已解决 这个错…

idea 编辑器常用插件集合

SequenceDiagram 用于生成时序图的插件&#xff0c;支持一键生成功能。 使用&#xff1a;选择某个具体的方法&#xff0c;点击右键菜单&#xff0c;选择“Sequence Diagram” 便可生成相应的时序图 例子&#xff1a; 效果&#xff1a; Code Iris Code Iris可以根据代码自动…

c++day3 手动封装一个顺序表(SeqList),分文件编译实现

要求: 有私有成员&#xff1a;顺序表数组的起始地址 ptr、 顺序表的总长度&#xff1a;size、顺序表的实际长度&#xff1a;len 成员函数&#xff1a;初始化 init(int n) 判空&#xff1a;empty 判满&#xff1a;full 尾插&#xff1a;push_back 插入&#xff1a;insert&…

优数:助力更高效的边缘计算

在数字化时代的浪潮中&#xff0c;数据已成为企业最宝贵的资产之一。随着物联网&#xff08;IoT&#xff09;设备的激增和5G技术的兴起&#xff0c;我们正迅速步入一个新时代&#xff0c;在这个时代中&#xff0c;数据不仅在量上爆炸性增长&#xff0c;更在速度和实时性上提出了…

Hadoop里面MapReduce的序列化与Java序列化比较

什么是序列化&#xff1f; jvm中的一个对象&#xff0c;不是类&#xff0c;假如你想把一个对象&#xff0c;保存到磁盘上&#xff0c;必须序列化&#xff0c;你把文件中的对象进行恢复&#xff0c;是不是的反序列化。 假如你想把对象发送给另一个服务器&#xff0c;需要通过网…

线性dp 总结详解

就是感觉之前 dp 的 blog 太乱了整理一下。 LIS(最长上升子序列) 例题 给定一个整数序列&#xff0c;找到它的所有严格递增子序列中最长的序列&#xff0c;输出其长度。 思路 拿到题目&#xff0c;大家第一时间想到的应该是的暴力(dp)做法&#xff1a; #include <bits/s…

基于Windows系统以tomcat为案例,讲解如何新增自启动服务,定时重启服务。

文章目录 引言I 设置服务自启动的常规操作II 安装多个tomcat服务,并设置自启动。III 定时重启服务引言 为了同一个版本安装多个tomcat服务,并设置自启动。使用Windows的任务计划程序来创建一个定时任务,用于重启Tomcat服务。I 设置服务自启动的常规操作 运行窗口输入control…

2024双11有哪些值得入手的好物?2024年双十一好物推荐

随着2024年双十一购物狂欢节的临近&#xff0c;消费者们正摩拳擦掌&#xff0c;准备迎接这场年度最大的网购盛会。面对琳琅满目的促销信息和令人眼花缭乱的商品&#xff0c;如何在海量商品中精准锁定那些真正值得购买的好物&#xff0c;成为每位精明买家的首要任务。本文旨在为…

牛啊,GitHub 代理加速图文教程

大家好&#xff0c;众所周知&#xff0c;GitHub 在国内访问速度堪忧&#xff0c;经常出现访问不了的情况&#xff0c;如果我们去 clone 代码&#xff0c;网速非常差。今天教大家如何给 GitHub 进行加速。 要用到我开发的开源项目 Cloudflare Workers Proxy&#xff0c;它是一个…

视频压缩篇:适用于 Windows 的 10 款最佳视频压缩器

视频压缩器现在对许多想要减小视频大小的视频编辑者来说非常有名。但是&#xff0c;并非所有可以在网上找到的视频压缩器都能产生最佳输出。因此&#xff0c;我们搜索了可以无损压缩视频的最出色的视频压缩器应用程序。本文列出了您可以在离线、在线和手机上使用的十大最佳视频…

2024华为杯研赛D题保姆级教程思路分析+教程

2024年中国研究生数学建模竞赛D题保姆级教程思路分析 D题&#xff1a;大数据驱动的地理综合问题&#xff08;数学分析&#xff0c;统计学&#xff09; 关键词&#xff1a;地理、气候、统计&#xff08;细致到此题&#xff1a;统计指标、统计模型、统计结果解释&#xff09; …

无线领夹麦克风哪个降噪好?一文搞懂麦克风什么牌子的音质效果好

对于视频拍摄、直播来说&#xff0c;一款好的拾音麦克风是不可或缺的。作为一位数码博主&#xff0c;也是会经常拍摄视频讲解&#xff0c;早期没有使用麦克风时&#xff0c;声音不够清晰&#xff0c;而且周围环境音也会同时被收录&#xff0c;导致整个音频的音质效果极差&#…