open和fopen区别、虚拟内存

其实没必要水的,然而就是老记混open和fopen,于是顺便学学其他的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<stdio.h>
#include<fcntl.h> //文件控制库
int main(){
int f1=open("D:\\desktop\\dick.txt",O_RDONLY);
if(f1==-1){
printf("Err0r!!\n");
return 0;
}

char ch1[100];
int len=read(f1,ch1,100);
printf("%s\n",ch1);
printf("len=%d",len);
close(f1);

/*----------------------------------*/

FILE *f2=fopen("D;\\desktop\\dick.txt","r");
char ch2[100];
fread(ch2,1,100,f2);
printf("%s\n",ch2);
fclose(f2);

return 0;
}

然后,fopen是标准c库函数,open是系统函数,使用open返回的是文件描述符,而是用fopen返回的则是文件指针

文件描述符和文件指针关系:

程序运行后变成进程,在内存的进程管理中,有个文件描述符表,每打开一个文件,就占用一个文件描述符(算了反正半懂不懂也是忘)
文件描述符才能找到文件在磁盘(即虚拟内存)中对应的位置

文件指针就是文件描述符和缓冲区(在物理内存上)的封装,数据先写到缓冲区,再写到磁盘

虚拟内存

电脑中所有运行的程序都需要内存来执行,如果执行的程序很大,会导致内存消耗殆尽。为了解决这个问题,WINDOWS运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,这部分空间即称为虚拟内存(作为内存使用的一部分硬盘空间),虚拟内存在硬盘上的存在形式就是 C:\PAGEFILE.SYS

与虚拟内存相对应的就是物理内存,绝大部分程序8会直接访问物理内存(危险),物理内存一般由操作系统访问

fopen和open区别

所以综上所述就是,标准c库函数操控系统函数访问文件,标准c库函数无法直接读写文件

以及在读写时标准c库函数比系统函数多了个缓冲区的流程

卧槽我居然看懂了我好牛逼??

fopen、open参数

open():
O_RDONLY  只读打开
O_WRONLY  只写打开
O_RDWR 读写打开

fopen():
r
w
a: 追加到一个文件(写入时在末尾写写入)
“r+” 打开一个用于更新的文件,可读取也可写入。该文件必须存在。
“w+” 创建一个用于读写的空文件。
“a+” 打开一个用于读取和追加的文件。


open和fopen区别、虚拟内存
https://bl4zygao.github.io/2021/12/29/open和fopen区别/
Author
bl4zy
Posted on
December 29, 2021
Licensed under