C语言中fopen函数打开文件后,文件以何种方式读入内存?

具体的说就是:如果打开文件成功获取文件指针后,按行读取文件。文件是一次性的从磁盘中被读入内存还是以一种什么样的方式读入。如果文件较大,一次读入不了内存,又会有怎么样的现象... 具体的说就是:如果打开文件成功获取文件指针后,按行读取文件。文件是一次性的从磁盘中被读入内存还是以一种什么样的方式读入。如果文件较大,一次读入不了内存,又会有怎么样的现象。请详细的描述下文件从磁盘读到内存的过程。 展开
 我来答
xu_cdx
推荐于2017-12-15 · TA获得超过280个赞
知道答主
回答量:122
采纳率:0%
帮助的人:76.5万
展开全部
现在大多数的系统采用分页机制,在打开文件成功后,文件并没有加载进入内存,而是内核生成了一个文件描述符,文件描述符含有一个指向文件indoe结构的指针,在这个结构中存有文件真正的节点信息和位置。当读取的时候,cpu首先判定需要读取的位置是否在内存上,如果再则直接读取(没有所谓的按行读取一说,按行读取不过是找文件中的换行标而已,当读到换行符的时候返回结果),如果不在内存上,则通过内存管理器进行加载,实际上,无论你是读取一个字符还是一行,加载的大小是固定的,比如系统机制是加载1M,当你文件大于1M时也只加载1M,当不够时全部加载。对不不同系统方式不同。(当然系统如果对读文件有特殊的优化也不同),当你读取之后,文件是继续留在内存还是释放,这里有另一套极其复杂的机制在管理。因为在你读第一行和第二行的时间里,还有许多事情在并发的执行。
风若远去何人留
推荐于2018-03-10 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450103
专业C/C++软件开发

向TA提问 私信TA
展开全部
打开文件后, 读文件有一个缓冲区, 真正读文件是按块读的。
一块多大和你系统有关。比如读4K到内存。
然后 程序的读函数, 是从缓冲区去读的。 要读的数据, 在缓冲区里面就直接读到程序。
不在, 那么清掉缓冲, 重新读一次文件对应位置。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
星月小木木
2016-01-13 · TA获得超过3.2万个赞
知道大有可为答主
回答量:2.4万
采纳率:0%
帮助的人:9456万
展开全部
C语言fopen函数用于打开文件。
函数原型:FILE * fopen(const char * path,const char * mode);
参数:
path 字符串类型,表示文件所在的路径,包括文件名
mode 打开文件的模式、
返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。
mode:
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
实例:
#include<stdio.h>

#define F_PATH "d:\\myfile\\file.dat"
int main(void)
{
FILE*fp=NULL;//需要注意
fp=fopen(F_PATH,"r");
if(NULL==fp)
{
return -1;//要返回错误代码
}
fclose(fp);
fp=NULL;//需要指向空,否则会指向原打开文件地址

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
记住一座城
2012-02-12 · TA获得超过728个赞
知道小有建树答主
回答量:1091
采纳率:33%
帮助的人:657万
展开全部
那要看你指定什么方式送入,字符,字符串还是一组数据,内存存取速度很快,windows 启动,把指令和数据读入内存都这么快,更何况其他程序。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Is_it_right
2012-02-12 · TA获得超过1031个赞
知道小有建树答主
回答量:410
采纳率:0%
帮助的人:405万
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式