Linux进阶-文件

news2025/1/14 1:09:57

Linux内核:屏蔽硬件区别,把所有的硬件设备抽象成文件,提供统一的接口给用户使用。

目录

虚拟文件系统:抽象层,对文件的访问实际上是对抽象层的访问。

普通文件系统:ext4、fat32、ubifs

特殊文件系统

文件IO五大模式:阻塞模式、非阻塞模式、IO多路复用、异步IO、信号驱动IO。

系统IO和标准IO

系统IO编程 

open函数

close函数

read函数

write函数

lseek函数:设置文件读写位置

sync函数:页缓存和回写,强制把修改过的页缓存区数据写入磁盘 

标准IO编程


虚拟文件系统:抽象层,对文件的访问实际上是对抽象层的访问。

抽象对象:封装了底层读写细节,使用c语言的多态来实现具体文件系统的接口。

普通文件系统:ext4、fat32、ubifs

特殊文件系统

进程文件系统:procfs,挂载在/proc,存放进程相关信息,任务管理器。

设备文件系统:devfs,挂载在/dev。存放硬件操作接口。

文件IO五大模式:阻塞模式、非阻塞模式、IO多路复用、异步IO、信号驱动IO。

系统IO和标准IO

 

系统IO编程 

int fd;    //定义文件描述符
fd=open(filename,flags,mode);    //open(文件名,模式,权限(可选))
lseek(fd,offset,whence);         //lseek(文件描述符,读写位置的偏移量,文件读写位置的基准值)
write(fd,buf,write_len);
read(fd,buf,read_len);
close(fd);
主模式(互斥,只选其一)描述副模式(兼容,可多选)描述
O_RDONLY只读模式O_CREAT当文件不存在,需要去创建文件
O_WRONLY只写模式O_APPEND追加模式
O_RDWR读写模式O_DIRECT直接IO模式,读写数据跳过页缓存区,直接在磁盘操作
O_SYNC同步模式,不需要手动添加sunc函数
O_NOBLOCK非阻塞模式

open函数

//所需头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

//函数原型
int open(const char* pathname,int flags);            //当文件存在时
int open(const char* pathname,int flags,int perms);  //当文件不存在时

//返回值
成功:文件描述符
失败:-1

close函数

//所需头文件
#include <unistd.h>

//函数原型
int close(int fd);

//返回值
成功:0
失败:-1

read函数

//所需头文件
#include <unistd.h>

//函数原型
ssize_t read(int fd,void *buff,size_t count);

//返回值
成功:
count:成功读取全部字节
0~count:
    剩余文件长度小于count
    读取期间被异步信号打断
失败:-1,读取错误

write函数

//所需头文件
#include <unistd.h>

//函数原型
ssize_t write(int fd,void *buff,size_t count);

//返回值
成功:
count:成功写入全部字节
0~count:写入期间被异步信号打断
失败:-1,写入错误

 

lseek函数:设置文件读写位置

whence描述
SEEK_SET基准点为文件开头
SEEK_CUR基准点为当前位置
SEEK_END基准点为文件末尾
//所需头文件
#include <unistd.h>

//函数原型
off_t lseek(int fd,off_t offset,int whence);

//返回值
成功:文件偏移位置值
失败:-1

sync函数:页缓存和回写,强制把修改过的页缓存区数据写入磁盘 

//所需头文件
#include <unistd.h>

//函数原型
void sync(void);

//返回值
无

 

标准IO编程

C标准库实现了一个IO缓存区。

常见标准IO函数(跟上述系统IO函数使用差不多):

fopen

fclose

fread

fwrite

fseek

fflush:强制把IO缓存区的数据写入到页缓存区

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

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

相关文章

java 数据脱敏

1.SQL数据脱敏实现 MYSQL(电话号码,身份证)数据脱敏的实现 -- CONCAT()、LEFT()和RIGHT()字符串函数组合使用&#xff0c;请看下面具体实现-- CONCAT(str1,str2,…)&#xff1a;返回结果为连接参数产生的字符串 -- LEFT(str,len)&#xff1a;返回从字符串str 开始的len 最左字…

NestJS学习:搭建项目、依赖注入、常用命令、RESTful 风格设计

介绍 Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架。它利用 JavaScript 的渐进增强的能力&#xff0c;使用并完全支持 TypeScript &#xff08;仍然允许开发者使用纯 JavaScript 进行开发&#xff09;&#xff0c;并结合了 OOP &#xff0…

现代密码学导论-4-完美保密及其三个等价定义

目录 完美保密 Perfectly Secret Encryption 2.1 完美保密的定义 DEFINITION 2.3 完美保密加密方案的定义 LEMMA 2.5 完美保密方案的等价定义(一) 证明引理2.5与定义2.3等价 完美不可区分性 不可区分实验 The adversarial indistinguishability experiment DEFINITION …

基于微信小程序的家校通系统-JAVA【数据库设计、源码、开题报告】

第一章 绪 论 1.1选题背景 随着网络时代的到来&#xff0c;互联网的优势和普及时刻影响并改变着人们的生活方式。在信息技术迅速发展的今天&#xff0c;计算机技术已经遍及全球&#xff0c;使社会发生了巨大的变革。 为了不受时间和地点的限制&#xff0c;智能手机用户可以通…

MySQL学习笔记-----Navicat设置建表

1.数据库字段设置 id 主要设置有bigint 和int两种 长度一般都是20 字符 主要设置 varchar 长度 我一般设置 255 时间 主要是设置为timestamp 混合日期和时间值&#xff0c;时间戳 &#xff0c;建议在java端的DTO或者request设置时间格式 判断状态 比如mybatis-pl…

宋祖德六评岳云鹏,大饼脸、文化低、总有一句能戳中你的内心

都知道娱乐圈有一个纪委书记&#xff0c;那就是万达的公子王思聪&#xff0c;其实在郭德纲的北京德云社&#xff0c;也有一位义务纪委书记。著名导演宋祖德&#xff0c;就是德云社的纪委书记&#xff0c;这些年他把所有的重心&#xff0c;都放在了约束德云社上面。 俗话说&…

Mysql优化-经验分享

目录什么是索引索引类型主键索引唯一索引组合索引前缀索引全文索引空间索引索引的数据结构HASH表二叉树平衡二叉树红黑树B树B树索引的存储引擎MyISAMInnoDB索引优化方向分层SQL优化表设计三范式索引合理使用服务器优化内存升级碎片优化工具的使用explainshow processlistshow p…

基于单片机的音乐盒

本设计是基于单片机的音乐盒&#xff0c;主要实现以下功能&#xff1a; 1&#xff0c;可通过按键控制音乐的选择、声音的大小和开始/停止播放&#xff1b; 2&#xff0c;通过MP3模块播放音乐&#xff1b; 3&#xff0c;可通过蓝牙连接手机&#xff0c;用手机远程控制&#xff…

书法比赛评分系统-JAVA【数据库设计、源码、开题报告】

1 引言 1.1 选题背景及意义 书法艺术&#xff0c;是中国的国粹;是经过数千年历史积淀和先哲们上下求索而形成的灿烂的文化瑰宝;是囊括了人与天地之间的大学问;是中华民族智慧的结晶;是最具中国特色的文化艺术门类。它不仅在中国&#xff0c;而且在世界上也享有极高的荣誉&…

Spring Boot 自定义配置元数据

Spring Boot 自定义配置元数据 概述 开发Spring Boot应用程序时, 可以把 application.properties文件中的配置属性直接转换为 Java Bean对象。这也是Spring Boot 约定大于配置的理念的体现&#xff0c;通过框架内置的各种属性按照不同的需求进行排列组合&#xff0c;满足特定…

Spring Boot Admin2 @EnableAdminServer的加载

其他相关文章&#xff1a; 1、Spring Boot Admin 参考指南 2、SpringBoot Admin服务离线、不显示健康信息的问题 首先根据官网的“快速开始”&#xff0c;快速搭建一个Spring Boot Admin Server项目 1、添加Spring Boot Admin启动器到依赖 pom.xml <dependency><grou…

低代码会使初级码农失业吗?

低代码的目的是提升效率&#xff0c;不是压榨生存空间。低代码不代表低技术&#xff0c;所以低代码并不会导致初级码农失业&#xff0c;实际上不仅不会导致失业&#xff0c;还帮助更多人走上了“开发者”岗位。 何为低代码&#xff1f; 所谓“低代码”&#xff08;Low-Code&a…

day29 SQL注入增删改查盲注延时布尔报错

前言 #知识点&#xff1a; 1、明确查询方式注入Payload 2、明确查询方式注入产生功能 3、明确SQL盲注延时&布尔&报错 #详细点&#xff1a; 盲注就是在注入过程中&#xff0c;获取的数据不能回显至前端页面。 此时&#xff0c;我们需要利用一些方法进行判断或者尝…

基于JAVA的房屋租赁系统平台【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86427640 租户在租房过程中如何才能保护自己的合法权益? 出租方在租房过程中又如何证明房屋的所属关系?种种租赁相关话题&#xff0c;成了当下关注的民生热点&#xff0c;为了切实解决人民群…

BUUCTF Reverse/[GXYCTF2019]simple CPP

BUUCTF Reverse/[GXYCTF2019]simple CPP 先看文件信息&#xff0c;是个64位的程序&#xff0c;且没有加壳 IDA64位打开 int __cdecl main(int argc, const char **argv, const char **envp) {bool v3; // si__int64 v4; // rax__int64 v5; // r8__int64 v6; // r8unsigned __in…

【ESP32_8266_MQTT篇】

文章目录MQTT介绍1 MQTT历史2 MQTT版本MQTT介绍 MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范&#xff0c;易于实现。这些特点使得它对很多场景来说都是很好的选择&#xff0c;特别是对于受限的环境如机器与机器的通信&…

Java面向对象的特点之:继承

对于继承&#xff0c;当大家看到这个词语的时候&#xff0c;在现实生活中&#xff0c;想必也会自然而然的想到了&#xff1a;继承家产&#xff1f;&#xff1f;那么&#xff0c;在Java的面向对象的时候&#xff0c;也存在这样的思想&#xff01;&#xff01; 下面笔者来带领大…

【ASM】字节码操作 工具类与常用类 LocalVariablesSorter 源码介绍以及原理介绍

文章目录 1.概述2. LocalVariablesSorter#2.1 class info2.2 fields2.3 constructors2.4 methods2.4.1 newLocal method2.4.2 local variables method3.工作原理3.1 添加新変量3.2处理旧变量4.总结1.概述 在上一节文章中:【ASM】字节码操作 工具类与常用类 LocalVar

深度学习入门——基于TensorFlow的鸢尾花分类实现(TensorFlow_GPU版本安装、实现)

基于TensorFlow的鸢尾花分类实现0 引言1 基本介绍和环境搭建1.1关于TensorFlow-GPU环境搭建第一步:安装Anaconda&#xff1a;第二步&#xff1a;安装GPU版本需要&#xff0c;明确显卡型号第三步&#xff1a;打开conda终端建立Tensorflow环境第四步&#xff1a;激活虚拟环境&…

最简单例子解释python的transpose函数

二维数组的transpose就是矩阵的转置&#xff0c;这里直接略过。直接讨论三维情况。 首先&#xff0c;我们要弄清楚transpose的轴是什么意思&#xff1f; 0是代表了第一个轴&#xff0c;1是代表了第二个轴&#xff0c;2是代表了第三个轴&#xff0c;这里我们用x&#xff0c;y&…