c语言中的openf函数 c语言 open函数

C语言中fopen函数打开文件后,文件以何种方式读入内存?现在大多数的系统采用分页机制,在打开文件成功后 , 文件并没有加载进入内存 , 而是内核生成了一个文件描述符,文件描述符含有一个指向文件indoe结构的指针,在这个结构中存有文件真正的节点信息和位置 。当读取的时候,cpu首先判定需要读取的位置是否在内存上,如果再则直接读?。挥兴降陌葱卸寥∫凰担葱卸寥〔还钦椅募械幕恍斜甓?,当读到换行符的时候返回结果) , 如果不在内存上,则通过内存管理器进行加载 , 实际上,无论你是读取一个字符还是一行,加载的大小是固定的,比如系统机制是加载1M,当你文件大于1M时也只加载1M,当不够时全部加载 。对不不同系统方式不同 。(当然系统如果对读文件有特殊的优化也不同),当你读取之后 , 文件是继续留在内存还是释放,这里有另一套极其复杂的机制在管理 。因为在你读第一行和第二行的时间里 , 还有许多事情在并发的执行 。
c语言fopen怎么用fopen一般与buf搭配使用,通过与fgets函数配合使用,将文件中的字符串读到buf中,这样达到读出文件内容的目的代码如下:
FILE tf=NULL;//定义一个文件指着,用于判断fopen是否打开成功,并初始化为空;
char buf[1024]={0};//定义一个长度为1024的数组,用于存放文件的内容;
tf=fopen("c:\example.txt","r");//打开c盘指定文件,并以只读的形式打开,避免破坏原文件,将fopen的返回值放在指针tf中 , 若打开成功,则返回成功的指针,打开不成功则返回空;
if(tf != NULL)//判断是否成功 , 不等于NULL则表示成功;
{
if(fgets(buf,1024,tf) != NULL)//将指向c盘文件的指针的内容赋给buf , 长度为1024,并判断是否获取成功;
{
printf("buf=%s\n",buf);//将成功获取的字符串显示在屏幕上;
}
}
fclose(tf);//将已打开的文件关闭;
扩展资料:
fopen的工作原理
FILE *fp;
fp=fopen("filename.txt","w");
首先检测filename.txt是否存在 , 如果不存在则在磁盘 创建该文件,然后在内存开辟区域(应该是缓冲区)准备写该文件
调用fclose时 , 将内存中的内容写入到磁盘中去
测试(filename.txt不存在):
#include stdio.h
#include stdlib.h
int main()
{
FILE *fp1,*fp2;
fp1=fopen("filename.txt","w");
if(fp1==NULL)
{
printf("fp1 open failed!/n");
}
else
{
printf("fp1 open success!/n");
}
fp2=fopen("filename.txt","r");
if(fp2==NULL)
{
printf("fp2 open failed!/n");
}
else
{
printf("fp2 open success!/n");
}
fclose(fp1);
fclose(fp2);
return 0;
}
输出:
fp1 open success!
fp2 open success!
说明文件操作不是互斥的,而且以写方式打开文件,如果文件不存在 , 先在磁盘创建该文件
加入写入语句:
#include stdio.h
#include stdlib.h
int main()
{
FILE *fp1,*fp2;
fp1=fopen("filename.txt","w");
if(fp1==NULL)
{
printf("fp1 open failed!/n");
}
else
{
printf("fp1 open success!/n");
fputs("abcdef",fp1);
}
fp2=fopen("filename.txt","w");
if(fp2==NULL)
{
printf("fp2 open failed!/n");
}
else
{
printf("fp2 open success!/n");
fputs("ABC/n",fp2);
}
fclose(fp1);
fclose(fp2);
return 0;
}
打开filename.txt文件:
ABC
f
说明后关闭的,刷新了磁盘数据

推荐阅读