文件描述符与缓冲区 文件操作的底层原理 (文件描述符与inode之间有什么关系)

本文目录导航:

文件操作的底层原理(文件描述符与缓冲区)

在C和C++中,文件操作看似简单,但其实隐藏着底层的复杂机制。

文件操作主要涉及进程与文件的交互,这需要理解文件描述符和缓冲区的作用。

文件描述符与缓冲区 文件操作的底层原理 (文件描述符与inode之间有什么关系)

1. C/C++文件操作回顾

无论是C还是C++,基本操作步骤相同:以读写方式打开文件,执行操作后关闭。

但底层原理却大不相同。

2. 输入输出流与文件描述符

标准输入输出如stdin、stdout和stderr,本质上是硬件交互。

C/C++中的cin、cout和cerr对应这些硬件,如显示器。

输出内容实际上是硬件显示,如msg打印在显示器。

stdout和stderr的区别在于重定向功能,前者可重定向,后者不能。

如重定向到,内容会被写入。

3. 系统调用接口

在编程层面的文件操作,实际上是调用操作系统提供的接口,管理硬件资源。

比如open和close函数,分别用于打开和关闭文件。

open函数的参数包括文件名、访问模式和权限,返回文件描述符,而close函数则根据描述符管理打开的文件。

4. 文件描述符详解

操作系统为每个打开的文件分配一个唯一编号,即文件描述符。

0,1,2通常为标准输入输出。

open返回值就是文件描述符,用于后续操作。

操作系统通过file结构体管理文件,PCB中files结构体记录进程打开的文件,通过描述符找到对应的file指针。

5. 父子进程的文件共享

子进程继承父进程的文件描述符,包括标准输入输出,这使得文件操作在进程间共享变得可能。

6. 不同外设的读写

一套系统调用接口适应不同外设,如硬盘、显示器和标准输入,通过设备驱动实现差异化的读写操作。

7. 文件描述符的分配与重定向

标准输入输出文件描述符固定,关闭后会留给后续文件使用。

重定向是通过改变描述符指向实现的,如将1号描述符重定向到文件。

8. 缓冲区的理解

缓冲区分为用户缓冲区和系统缓冲区,用户层缓冲区用于暂存数据,根据刷新策略,如行缓冲或全缓冲,再写入硬件。

重定向会影响缓冲区刷新,理解这一点有助于掌握文件操作的细节。

总结

文件操作涉及找文件和写文件两个步骤,理解文件描述符是关键,同时要掌握用户和系统缓冲区的工作原理。

通过文件描述符,进程找到文件,而缓冲区则负责数据在用户和硬件间的传输策略。

c语言如何读取文件并输出

1、C语言标准库提供了一系列文件操作函数。

文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中。

例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数用于文件读取;fprintf、fputs函数用于文件写入;ftell、fseek函数用于文件操作位置的获取与设置。

2、例程:#include<stdio.h>int a;char b,c[100];int main(){FILE * fp1 = fopen(, r);//打开输入文件FILE * fp2 = fopen(, w);//打开输出文件if (fp1==NULL || fp2==NULL) {//若打开文件失败则退出puts(不能打开文件!);rturn 0;}fscanf(fp1,%d,&a);//从输入文件读取一个整数b=fgetc(fp1);//从输入文件读取一个字符fgets(c,100,fp1);//从输入文件读取一行字符串printf(%ld,ftell(fp1));//输出fp1指针当前位置相对于文件首的偏移字节数fputs(c,fp2);//向输出文件写入一行字符串fputc(b,fp2);//向输出文件写入一个字符fprintf(fp2,%d,a);//向输出文件写入一个整数fclose(fp1);//关闭输入文件fclose(fp2);//关闭输出文件,相当于保存return 0;}

关于c语言的文件操作

int rfp;rfp = open(filename, 1);//打开文件名为filename的文件lseek(rfp, 127, SEEK_SET); //将该文件读写位置设置为127(即第128个字节)write(rfp, one_str, 26);//往该文件的当前位置写入one_str数组的前26个字节函数原型:int open(const char *path, int access,int mode);作用:以各种方式打开文件返回值:返回打开的文件句柄,-1 打开失败输入参数说明:path 要打开的文件路径和名称 access 访问模式,宏定义和含义如下:O_RDONLY1 只读打开 O_WRONLY2 只写打开O_RDWR4 读写打开函数原型:long lseek(int handle,long offset,int fromwhere)功能:把文件指针移动到fromwhere所指的地址加上offset新位置的偏移上。

参数:handle=open()函数的返回值(文件句柄);fromwhere=文件位置SEEK_SET(0)从文件头位置;SEEK_CUR(1)从当前文件指针位置;SEEK_END(2)从文件结尾位置)函数原型:int write(int handle,char *buf,unsigned len) 用法:write(文件句柄,缓冲区地址,缓冲区字节长度<最大>); 功能:将缓冲区的数据写入与handle相联的文件或设备中,handle是从creat、open、dup或dup2调用中得到的文件句柄。

对于磁盘或磁盘文件,写操作从当前文件指针处开始,对于用O_APPEND选项打开的文件,写数据之前,文件指针指向EOF;对于设备,字节被直接传送到设备中; 返回值:实际写入的字节数(不包括回车符),出错时返回-1。

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

85阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

84阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

77阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读