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

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

 

《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");也没任何错误



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
引用\[1\]中的代码展示了如何使用fishhook库来hook open和fopen函数。在main函数中,通过rebind_symbols函数将fopen函数重新绑定到my_fopen函数上,然后在my_fopen函数中可以对打开文件的操作进行个性化的判断和记录。这样就可以实现对open和fopen函数的hook操作。 引用\[2\]中提到,通过hook open函数可以打印系统中所有调用open函数打开文件的文件路径和使用open函数的进程PID以及进程名。在hook_fun()函数中可以对open函数的调用进行个性化的判断,例如禁止打开某些文件、篡改打开文件的路径或记录打开文件的行为等。 在Linux系统下,文件的创建、读取、追加、写入和删除等操作涉及到以下系统调用:open、fopen、read、write、lseek、close和unlink。通过hook这些系统调用,可以对文件操作进行监控和控制。 所以,通过使用fishhook库和hook技术,可以实现对open和fopen函数的hook操作,从而对文件操作进行个性化的判断和记录。 #### 引用[.reference_title] - *1* [使用fishhook hook函数fopen](https://blog.csdn.net/pureszgd/article/details/105282990)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [简述API HOOK技术及原理](https://blog.csdn.net/bing1564/article/details/130457403)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【Android】Frida Hook 文件读写操作](https://blog.csdn.net/xiru9972/article/details/131182528)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值