基础文件I\O

标准I\O与文件I\O,静态库和动态库 标准I/O与文件I/O,静态库和动态库 阅读详情

标准输入,标准输出,标准错误
-----> stdin stdout stderr
实质:是文件指针(FILE*),指向对应的文件结构体

库函数:对系统调用进行一层封装,使用户更容易使用系统调用
会自带缓冲区(fopen, fread, fclose, fwrite)

系统调用:操作系统提供的接口,用户可通过系统调用进行开发等…
(open, read, close, write, lseek)

open函数:
原型:int open(const char* pathname, int flags, [mode_t mode]);
pathname:要打开的文件
flags: 只读(O_RDONLY) 只写(O_WRONLY) 读写(O_RDWR) 追加(O_APPEND)
成功:返回操作该文件的句柄,即文件描述符
失败:-1
注:flags 还有一个 O_CREAT :若文件不存在,则创建它,需要使用mode选项,指明文件的访问权限

文件描述符

概念:从0开始的小整数,是文件描述符表(数组)的下标

stdin 对应文件描述符 0
stdout 对应文件描述符 1
stderr 对应文件描述符 2

分配原则:每当要申请文件描述符时,都会在文件描述符表当中找到当前没有被使用的最小的一个下标作为新的文件描述符

关闭文件描述符: close(fd);
1.当文件不再使用了,就需要关闭文件描述符
2.关闭文件描述符,会清理文件描述符所对应的file对象,并且在文件描述符表中将该文件描述符的位置清理掉
3.若不关闭文件,会导致文件描述符泄漏,以至于无法正确打开文件
注:文件描述符的上限可由 ulimit -a 查看
也可以修改上限值,文件描述符上限可由用户自己配置

文件描述符的重定向:
通过 dup2(oldfd, newfd):将new重定向在old上
即让new变得和old一样
代码实现:

#include<stdio.h>                                                                                                 
#include<unistd.h>                                                                                                
#include<sys/types.h>                                                                                             
#include<sys/stat.h>                                                                                              
#include<fcntl.h>                                                                                                 
                                                                                                                  
int main()                                                                                                        
{    
	//以只写方式打开文件dup.txt,得到文件描述符writefd																											//
    int writefd = open("./dup.txt", O_WRONLY);                                                                    
    if(writefd < 0){                                                                                              
        perror("write open error");                                                                               
        return -1;                                                                                                
    }   
	//以只读方式打开文件dup2.txt,得到文件描述符readfd	
    int readfd = open("./dup2.txt", O_RDONLY);                                                                    
    if(readfd < 0){                                                                                               
        perror("read open error");                                                                                
        return -1;                                                                                                
    }  
	//将标准输出重定向到writefd,调用printf时,就会将数据写入dup2.txt中
	//将标准输入重定向到readfd,调用read(0,...)时,就会将dup.txt中的数据读取出来
    dup2(writefd, 1);                                                                                             
    dup2(readfd, 0);                                                                                              
                                                                                                                  
    char buf[1024] = {0};                                                                                         
    int ret = read(0, buf, sizeof(buf) - 1);                                                                      
    if(ret < 0){ 
		perror("read error");                                                                                     
        return -1;                                                                                                
    }                                                                                                             
    printf("buf = %s\n", buf);                                                                                    
    return 0;                                                                                                     
}  

调用之前:
在这里插入图片描述
调用之后:
在这里插入图片描述
输出重定向:
将本该输出到标准输出上的数据,输出到某个文件当中
常见重定向:>:输出重定向, <:输入重定向, >>:追加重定向

Linux缓冲机制:

1.无缓冲
2.行缓冲:
a).在遇到\n时刷新缓冲区
b).当缓冲区满了之后,刷新缓冲区
c).当程序退出时,刷新缓冲区
d).手动调用了fflush后,刷新缓冲区
3.全缓冲:
a).当缓冲区满了之后,刷新缓冲区
b).当程序退出时,刷新缓冲区
c).手动调用了fflush后,刷新缓冲区
注:若将数据输出到标准输出上,其缓冲机制是 行缓冲
若将数据输出到文件当中,其缓冲机制是 全缓冲

文件系统

操作系统核心的组成部分
stat 文件名: 显示文件的详细信息

以EXT4文件系统为例:
如图:
在这里插入图片描述
其内容分为三个部分: 超级块 i节点表 数据区
超级块:存放文件系统结构信息
i节点表:存放文件属性,即存放Inode结构体(用来描述磁盘中的文件)
数据区:存放文件内容
创建一个文件的步骤:
如图:
在这里插入图片描述
注:真正找到磁盘上文件内容的,是Inode,而不是文件名,所以一个Inode可以对应多个文件名!!
也就引出软、硬链接

关于进程的其他内容,大家可以关注一下我的博客,会不定期更新!
还请多多指教!!

在这里插入图片描述

C# 文件 I/O 操作详解:从基础到高级应用 在软件开发中,文件操作(I/O)是一项基本且重要的功能。无论是读取配置文件、存储用户数据,还是处理日志文件,C# 都提供了丰富的 API 来高效地进行文件读写操作。本文将全面介绍 C# 中的文件 I/O 操作,涵盖基础文件操作、文本/二进制文件读写、流式处理、异步 I/O 以及最佳实践,帮助开发者掌握文件处理的技巧。 阅读详情

相关推荐

PX4无人机实战:手把手教你用MAVROS实现Offboard模式(附避坑指南)

本文提供了一份详尽的PX4无人机Offboard模式实战指南,重点解析了如何通过MAVROS实现从仿真到实机的控制。内容涵盖硬件连接、串口权限设置、MAVROS配置、核心代码编写以及实机操作全流程,并附有详细的避坑指南和故障排查手册,帮助开发者快速掌握ROS与PX4飞控的集成开发。

weixin_29172201的博客 267

文件I/O编程

一、系统调用 所谓的系统的调用时操作系统提供给用户程序调用的一组“特殊”接口,用户可以同个接口获得系统提供的服务。例如用户通过系统调用可以实现创建进程、进程的管理、soket网络通信。 linux用户程序是不能直接访问系统内核提供的服务的。这样做是为了保护系统内核的数据不被修改,保证了系统的安全性。用户空间和内核空间是分离的,通常情况下用户程序不允许访问内核数据和内核的函数。 二、用户编...

移动编程 417

ENVI水体提取流程实践与问题

ENVI水体提取流程实践与问题 卫片解译中,水体属于比较好判别的一类。有水体指数、阈值法、监督分类等一系列方法进行提取,今天介绍利用水体指数和ENVI提取水体的过程。 1.所用数据 Landsat8卫片1景、ENVI5.3。 2.辐射定标与水陆分离 由于要对卫片进行水体指数的计算,因此需要对数据进行辐射定标以及大气校正的预处理。 辐射定标就是将图像的数字量化值(DN)转化为辐射亮度值或者反射率或者表面温度等物理量的处理过程。在工具栏中搜索Radiometric Correction,点开进行辐射定标。

Soul_taker的博客 4万+

linux 文件i/o编程小结

借用别人的一句话: 说到文件 IO 编程,那当然首先要来谈一谈在 Linux 操作系统里,什么是文 件?记得以前说过,在 Linux 中,几乎一切都可以看做是文件。串口、打印机、 硬盘等设备都可以看做是文件,学过驱动的应该都知道/dev/xxx 都是设备文件。 大多数情况下,这些文件都会涉及的函数接口一般有以下 5 个,open, read,write,ioctl,close。有人也许会说,目录也是文件吗?没错,目录在 Linux 环 境下确实是一个文件,只不过打开目录文件,用的函数不再是 open/rea

《愿你归来仍是少年》 464

【QGIS】PyCharm集成pyqgis的processing工具箱:环境配置与初始化实战

本文详细介绍了如何在PyCharm中配置QGIS的Python环境并成功集成其强大的Processing工具箱。文章核心解决了独立环境下导入processing模块失败、算法无法调用等常见难题,通过手动添加插件路径和执行关键初始化步骤,实现了在PyCharm中丝滑调用QGIS地理处理算法,从而将复杂的空间分析流程自动化。

weixin_28831399的博客 391

MAS1102量产工具实战指南:从下载到开卡,附固件选择与RDT优化技巧

本文提供MAS1102量产工具的实战指南,涵盖从工具下载、短接识别到开卡操作的全过程。重点解析了固件选择策略与RDT优化技巧,帮助用户成功修复基于联芸MAS1102主控的固态硬盘,解决常见开卡错误并提升SSD性能与稳定性。

c2d3e4f的博客 2202

Linux系统文件I/O编程(一)---open()等基本函数

Linux文件I/O系统概述     虚拟文件系统(VFS)     Linux系统成功的关键因素之一就是具有与其他操作系统和谐共存的能力。Linux系统的文件系统由两层结构构建:第一层是虚拟文件系统(VFS),第二层是各种不同的具体的文件系统。     VFS就是把各种具体的文件系统的公共部分抽取出来,形成一个抽象层,是系统内核的一部分,它位于用户程序和具体的文件系统之间。它对用户提供了标

王文松的博客 3万+

【Python基础】01 如何安装Python及集成环境

本文详细介绍了Python 3.13开发环境的完整搭建流程,涵盖三大操作系统(Windows/macOS/Linux)的Python安装方法、PyCharm专业IDE的配置使用,以及pip包管理工具的应用技巧。内容包括:Python 3.13各系统安装指南、PyCharm社区版与专业版的安装配置、环境验证方法、pip的基本命令与镜像源优化、虚拟环境管理,以及常见问题的解决方案。通过本教程,读者可获得一个高效完备的Python开发环境,为后续编程学习打下坚实基础。

nmdbbzcl的博客 1419

文件i/o编程之一

【代码1】 #include #include #include #include int main(void) { FILE *fp = NULL; if (NULL == (fp = fopen("1.txt", "r"))) { fprintf(stderr, "fopen : %s\n", strerror(errno)); exit(1); } int te

百里杨的博客 688

【YOLOv13[基础]】热力图可视化实践 | 脚本升级 | 优化可视化效果 | 论文必备 | GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM等

本文将进行添加YOLOv13版本的升级版热力图可视化功能的实践,支持图像热力图可视化、优化可视化效果、 可以选择使用GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM, HiResCAM, LayerCAM, RandomCAM, EigenGradCAM。一个参数即可设置是否显示检测框等。

静谧、淡雅 645

30、电力生产系统中的效率测量

本文探讨了如何使用数据包络分析(DEA)模型来评估电力生产系统的效率。文章详细介绍了电力生产系统的三个主要环节——发电、输电和配电,并通过多种DEA模型,如输入导向模型、输出导向模型以及基于松弛的SBM模型,展示了效率测量的方法和技术。同时,结合实际案例分析,说明了DEA模型在识别效率低下环节及提出改进建议方面的应用价值。

rgv2345678的博客 116

I/O文件的具体操作

对于一个磁盘来说,文件系统是通过文件目录从文件名来进行映射,从而得到了文件的空间分配,比如说MS-DOS将文件名映射为一个数,这个数显示了文件访问表的一个条目,这个条目说明了哪些磁盘块被分配给文件。在UNIX当中将文件名映射为inode号,相应的inode包含了空间分配信息 从文件名到磁盘控制器的连接是如何建立的?下面就举个例子来说明 在MS-DOS当中,其文件名在冒号前的部分有...

rv0p111 542

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java基础之文件与i\o流

1.java中I\O流分为几种? 按照流的流向分,可以分为输入流和输出流; 按照操作单元划分,可以划分为字节流和字符流; 按照流的角色划分,可以分为节点流和处理流 java io流涉及40多个类。但是都是从以下4个抽象基类中派生出来的。 inputStream/ Reader:所有输入流的基类,前者是字节输入流,后者是字符输入流。 OutputStream/ Writer: 所有输出流的基类,前者是字节输出字节流,后者是字符输出流。 1. 1java-IO中的节点流和处理流 定义 节点流:可

baidu_23244835的博客 253

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

嵌入式Linux,文件I\O操作基础,函数讲解。

以只读方式打开文件。

YYYYYYJJJJJYYYYY的博客 1218

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

python中newfile是干嘛用的_Python基础介绍 | File I\O 读写文件

如何用Python读写文件呢?我们有许多种办法,包括使用Pandas或者使用os相关的工具,我们来看一下:首先,得明白文件路径的事情:import oscurrent_file = os.path.realpath('file_io.ipynb')print('current file: {}'.format(current_file))# Note: in .py files you can g...

weixin_39901404的博客 707

Python基础学习笔记---5.输入\输出 I\O文件操作目录

在很多时候,你会想要让你的程序与用户(可能是你自己)交互。你会从用户那里得到输入,然后打印一些结果。我们可以分别使用 raw_input 和 print 语句来完成这些功能。对于输出,你也可以使用多种多样的 str (字符串)类。例如,你能够使用 rjust 方法来得到一个按一定宽度右对齐的字符串。利用 help(str) 获得更多详情。另一个常用的输入/输出类型是处理文件。创建、读和写文件的能力...

weixin_30532987的博客 92

Linux高级编程2 - 标准I\O与文件I\O

文件I/O系统调用: 文件I/O系统调用是操作系统提供的一组函数,允许用户程序与文件系统进行交互,包括创建文件、打开文件、读取文件内容、写入文件内容、关闭文件等操作。功能:ftell用于获取当前文件指针在文件中的位置,通常用于之后的fseek操作,以便能够恢复到当前的文件位置。注意:如果从文件的指定位置向后偏移过程中已经超过了文件的当前末尾位置,则会自动以'\0'来填充文件内容,从而形成一种被称为"空洞文件" 的特殊文件。功能: 关闭一个已打开的文件描述符,释放与该文件相关的资源。

cnhu_gpt的博客 2212

Linux C\C++方式下的文件I/O编程

在旧头文件里的fstream.h,如果使用ifstreamfile的默认参数声明一个输入文件流,当这个要读的file文件不存在时,会自动创建一个空文件,从而给判断文件是否存在造成了很多麻烦。因为C++兼容C,所以C中的输入输出函数依然可以在C++中使用,但是很显然,直接把C的那套输入输出搬到C++中肯定无法满足C++的需求,更重要的一点是,C中的输入输出有类型要求,只支持基本类型,因此C++设计了易于使用的并且多种输入输出流接口统一的I/O类库,并且支持多种格式化操作,还可以自定义格式化操作。

夏天又到了的专栏 3182

linux文件I/O

每调用一次 readdir(),就会从 drip 所指向的目录流中读取下一条目录项(目录条目),并返回 struct dirent结构体指针,指向经静态分配而得的 struct dirent 类型结构,每次调用 readdir()都会覆盖该结构。一旦遇到目录结尾或是出错,readdir()将返回 NULL,针对后一种情况,还会设置 errno 以示具体错误。使用opendir()函数打开需要统计的文件所在的目录,返回一个指向目录流的指针。pathname:可以是绝对路径后者相对路径。

TheoryGo的博客 1721

Linux 文件 I/O 基础

Linux 文件 I/O 基础操作虽然看似简单,但却是系统编程中不可或缺的部分。通过熟练掌握文件描述符、打开、读取、写入和关闭文件等基本操作,我们可以在 Linux 系统上进行各种复杂的文件处理任务,为进一步深入学习系统编程打下坚实的基础。希望这篇文章能帮助你对 Linux 文件 I/O 有一个初步的理解和掌握。

千千道的博客 1052

Linux 基础I/O

一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接(通过将数组初始化为零值,你可以确保在没有读取到数据的情况下,数组中不会包含垃圾数据,且如果读取到的字符串没有完全填满缓冲区,数组中未被填充的部分会自动是。读取数据时,读取的内容比数组的大小小,那么未被填充的部分将保留垃圾数据,这可能会导致意外的结果,尤其是在处理字符串时。

yuzhebalabala的博客 1215

python中的I\O以及路径常见操作

参考: How can I safely create a nested directory in Python? Automatically creating directories with file output [duplicate]

啷个哩个啷 2844

C语言文件操作基础 -- 标准I/O与文件I/O

读写若干个对象: fread()/fwrite() 每次读/写若干个对象,而每个对象具有相同的长度。行缓冲:当在输入和输出中遇到"\n"执行实际的I/O操作,当流和一个终端关联时,典型的行缓冲。fopen() 创建的文件访问权限是0666(rw-rw-rw-);读写一个字符: fgetc()/fputc() 一次读/写一个字符。2.fseek()定位一个流,成功时候返回0, 出错时候返回EOF。读写一行: fgets()/fputs() 一次读/写一行。feof()返回1表示文件已经到末尾;

turbolove的博客 1453

C语言:文件I\O

C 语言的文件 I/O 功能强大,通过标准库提供的函数,可以方便地进行文件的读写操作。正确地打开、读写和关闭文件,以及处理文件错误,是编写健壮程序的重要部分。通过理解文件指针、打开模式和各种文件操作函数,你可以有效地进行文件处理。

XWXnb6的博客 795

标准I/O文件操作

本文介绍了标准I/O文件操作的基础知识,包括文件概念、缓冲机制、分类及操作步骤。重点讲解了文件打开(fopen)和关闭(fclose)函数的使用方法,以及三种文件读写方式:单字符读写(fgetc/fputc)、行读写(fgets/fputs)和数据块读写(二进制文件访问)。文章还提供了文件拷贝的字符版和行处理版实现示例。最后强调了文件操作必须遵循"打开-处理-关闭"的基本流程,确保程序稳定性和数据安全性。

Dd000110的博客 1048
上一篇: Linux进程总结(下)
下一篇: 软\硬连接
Code_zx
博客等级 码龄9年 83粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值