zoukankan      html  css  js  c++  java
  • 两次fopen不同的文件返回相同的FILE* 地址

        最近接触一个垃圾程序,出现一个奇怪的bug,现象是两次fopen不同的文件返回相同的FILE*地址,第二次返回的FILE*有时候无端端的就被关闭了。以下代码是对这个bug的概括:

    auto fp1 = fopen("c:/1.txt", "rb");    

    char buff[10];    

    assert(fread(buff, 1, 10, fp1) == 10);    

    // 垃圾程序关闭fp1时没有至fp1=nullptr    

    fclose(fp1);

    // 微软的crt对FILE*使用缓存机制,所以这里返回的fp2==fp1,可参考stream.c里的_getstream函数    

    auto fp2 = fopen("c:/1.txt", "rb");

    // 垃圾程序的垃圾结构引起第二次关闭fp1,事实上,这里将引起fp2的关闭    

    fclose(fp1);    

    // 于是垃圾程序读fp2失败    

    assert(fread(buff, 1, 10, fp2) == 10);

    最后,都用C++喇,谁tmd还用fopen这么古老的api,次凹!!!!

  • 相关阅读:
    httphelper
    MD5加密
    json操作
    将list转成tree
    GenerateId类:生成唯一id、订单号
    加密、解密(默认密钥向量)
    Hadoop HDFS批量处理
    OceanBase学习总结
    TiDB学习
    开机自启动rc.local文件修改权限
  • 原文地址:https://www.cnblogs.com/rickerliang/p/3189632.html
Copyright © 2011-2022 走看看