fopen的工作原理

FILE *fp;

fp=fopen("filename.txt","w");

首先检测filename.txt是否存在,如果不存在则在磁盘 创建该文件,然后在内存开辟区域(应该是缓冲区)准备写该文件

调用fclose时,将内存中的内容写入到磁盘中去

 

测试(filename.txt不存在):

#include
#include
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
#include
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

说明后关闭的,刷新了磁盘数据

 

《C语言参考手册》第五版,机械工业出版社,p261,有一段

 

在标准C语言中,访问方式字符串还可以在上述方式符之后包含其他字符。实现可以用这些补充指定数据流的其他属性,例如:

f=fopen("C://work//dict.txt","r,access=lock");

 

编译不报错,可惜

fp1=fopen("filename.txt","w, access=lock");

fp2=fopen("filename.txt","w, access=lock");

没看到任何影响,我用的是codeblock GNU GCC compiler

而且改 fp1=fopen("C://work//dict.txt","r,ac");也没任何错误



你可能感兴趣的:(fopen的工作原理)