如果文件已经打开,fopen 是否返回 NULL 指针?

2023-11-30

我当时假设fopen回报NULL指针(如果文件已打开)。但看起来fopen不返回NULL如果文件已在以下位置打开"w"模式。下面是我用来尝试此操作的代码,但没有收到任何错误。我尝试使用 mingw32 以及 TDM-GCC-64 编译器。如果我没记错的话,如果文件已经打开,C++ 会给出错误。

#include<stdio.h>

int main()
{
    FILE *fp1, *fp2;
    
    fp1 = fopen("file1.txt", "w");
    fp2 = fopen("file1.txt", "w");
    
    if(fp2 == NULL)
    {
        printf("Error in opening file\n");
        return(0);
    }
    
    // Edit: added following code to check the behavior if write operation
    // is performed simultaneously
    
    fputc('A', fp1);
    fputc('M', fp1);
    fputc('S', fp1);
    fputc('B', fp2);
    
    fclose(fp1);
    fclose(fp2);
    
    return 0;
}

编辑:添加了额外的代码以向两者写入一些数据fp1 and fp2并查看行为。如果执行的话,file1.txt包含数据BMS似乎是正确的行为fp1 and fp2按预期独立移动。第一的AMS是用写成的fp1进而A被替换为B using fp2最终输出是BMS.


根据 C 标准 (7.19.3.8),它是实现定义的:

打开附加(非临时)文件的函数需要一个文件名,该文件名是一个字符串。组成有效文件名的规则是实现定义的。同一个文件是否可以同时打开多次也是由实现定义的。

最重要的是,由于其他原因而不鼓励这样做,例如参见SEI CERT C 编码标准的 FIO24-C 推荐:

某些实现不允许同时打开同一文件的多个副本。因此,可移植代码不能依赖于违反此规则会发生什么。即使在打开已打开文件时并非完全失败的实现中,也存在 TOCTOU(检查时间、使用时间)竞争条件,其中第二个打开操作可能会在与第一个打开的文件不同的文件上进行操作,因为正在移动或删除的文件(有关 TOCTOU 竞争条件的更多详细信息,请参阅 FIO45-C。访问文件时避免 TOCTOU 竞争条件)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果文件已经打开,fopen 是否返回 NULL 指针? 的相关文章

  • c++11 正则表达式比 python 慢

    嗨我想了解为什么以下代码使用正则表达式进行分割字符串分割 include
  • 用 C# 启动 Windows 服务

    我想启动一个刚刚安装的Windows服务 ServiceBase ServicesToRun if bool Parse System Configuration ConfigurationManager AppSettings RunSe
  • OpenCV Visual Studio ntdll.dll

    我尝试在 Visual Studio 2013 上使用 OpenCV 2 4 10 创建一个项目 但由于以下异常 到目前为止我运气不佳 请建议帮助 TIA letstryitonemoretime exe Win32 Loaded C Us
  • C++ 中的单例和抽象基类

    最近我遇到了关于实现 Singleton 但涉及抽象基类的问题 假设我们有这样的类层次结构 class IFoo it s ABC class Foo public IFoo 我们的单例类定义如下 template
  • 我们如何将数据从一个打开的表单传递到另一个打开的表单?

    winform中如何将数据从一个窗体传递到另一个打开的窗体 在 Windows 应用程序中 一个窗体打开另一个窗体 当我在父表单中输入一些数据时 这些数据将立即反映在另一个子表单中 这将如何发生 取决于你想要多花哨 最简单的方法就是直接调用
  • 异步方法中的异常未被捕获

    下面的代码没有捕获我的OperationCancelEException 它是通过调用抛出的ct ThrowIfCancellationRequested public partial class TitleWindow Window IA
  • async wait 在调用异步方法时返回 Task> 而不是 List

    我正在尝试了解 async wait 的用法 并且研究了一些博客文章 现在我已经编写了一个测试代码 但它没有按照我期望的方式工作 我有一个返回列表的方法 private List
  • 如何在 C++ 中对静态缓冲区执行字符串格式化?

    我正在处理一段对性能要求非常高的代码 我需要执行一些格式化的字符串操作 但我试图避免内存分配 甚至是内部库的内存分配 在过去 我会做类似以下的事情 假设是 C 11 constexpr int BUFFER SIZE 200 char bu
  • 正则表达式删除某些字符周围不需要的空格

    我正在尝试从 JavaScript 文件中删除一些不需要的空格 并在将文件发送到客户端之前使用 C 和 Regex 组合文件 我有一个JavascriptHandler处理 js 文件 效果很好 这是我用来 打包 JavaScript 的函
  • Azure 2012 年 10 月 SDK 损坏 UseDevelopmentStorage=true

    有人尝试过使用 usedevelopmentstorage true 连接字符串的 2012 年 10 月 Azure sdk 吗 CloudStorageAccount Parse UseDevelopmentStorage true 抛
  • C 中“for”循环中的两个变量

    我正在编写一些代码 需要在其中使用两个变量for环形 下面的代码看起来没问题吗 它确实给了我预期的结果 for loop 1 offset loop 2 offset 2 loop 1 gt offset 190 loop 2 lt 190
  • 替换 JSON 中的转义字符

    我想用空格替换 JSON 字符串中的 字符 我怎样才能做到这一点 我发现从 JSON 字符串中删除所有转义字符的最简单 最好的方法是将字符串传递到正则表达式 Unescape 方法 此方法返回一个没有转义字符的新字符串 甚至删除了 n t
  • 如何附加到 xml

    我有这个xml
  • 在 ncurses 中使用退格键

    我设置了一个简单的 ncurses 程序 它使用 getch 一次读取一个字符并将它们复制到缓冲区中 我遇到的问题是检测到按下退格键 这是相关代码 while buffer i c getch EOF i if c n break else
  • 如何用C++解析复杂的字符串?

    我试图弄清楚如何使用 解析这个字符串sstream 和C 其格式为 string int int 我需要能够将包含 IP 地址的字符串的第一部分分配给 std string 以下是该字符串的示例 std string 127 0 0 1 1
  • 为什么C++变量是指针时不需要正确定义?

    我对 C 语言完全陌生 特别是指针 经验主要是 PHP 并且希望对以下内容进行一些解释 我已经尝试寻找答案 这两行代码如何能够在我的程序中完成完全相同的工作 第二行似乎违背了我迄今为止所学到和理解的关于指针的一切 char disk 3 D
  • 为什么 std::ranges::filter_view 对象必须是非常量才能查询其元素?

    include
  • Qt:将拖放委托给子级的最佳方式

    我在 QWidget 上使用拖放 我重新实现了 DragEnterEvent dragLeaveEvent dragMoveEvent 和 dropEvent 效果很好 在我的 QWidget 中 我有其他 QWidget 子级 我希望它们
  • 需要使用 openssl 加密和解密文件的示例 C 代码

    我正在用 Linux C 编写代码 我需要使用以下命令来加密和解密文件 openssl 目前 我使用系统命令 des3 e nosalt k 0123456789012345 in inp file out out file 进行加密 使用
  • 如何分析 VSCode 中函数的性能

    我用 C Golang 编写了一个程序 如何找到占用最高 CPU 周期的函数 目的是提高正在执行的程序的性能 2021 年 10 月 金香儿哈娜 https github com hyangah宣布 tweet https twitter

随机推荐

  • Java初始化和实例化的顺序

    我正在尝试将 JVM 中的初始化和实例化过程拼凑在一起 但 JLS 在一些细节上有点迟钝 因此如果有人介意清理一些细节 我们将不胜感激 这是我到目前为止所能弄清楚的 初始化 递归地初始化类的静态最终变量及其作为编译时常量的接口 按文本顺序退
  • 谷歌应用引擎;上传到 blobstore 出现 404 错误

    我正在使用 GAE 和 Python 2 7 制作一个网站 可以将带有 ascii 数据的文件上传到 blobstore 我为此使用的代码与本节下的教程中给出的代码几乎相同完整的示例应用程序 https developers google
  • 在浏览器中从网络摄像头获取 ReadableStream

    我想在浏览器中将网络摄像头输入作为 ReadableStream 传输到 WritableStream 我尝试过使用 MediaRecorder API 但该流被分成单独的 blob 而我想要一个连续的流 我认为解决方案可能是将 Media
  • 除非重复为 true,否则 UNCalendarNotificationTrigger 不会被存储

    我注意到如果我创建一个UNCalendarNotificationTrigger使用自定义日期 除非我输入 let trigger UNCalendarNotificationTrigger dateMatching components
  • 为什么在这种情况下我必须以某种方式关闭 ZipOutputStream?

    我有两个例子 示例1 try ByteArrayOutputStream baous new ByteArrayOutputStream FileOutputStream fouscrx new FileOutputStream new F
  • 使用 PHP GD 图像库着色和交换颜色?

    您好 我正在尝试使用 PHP 的 GD 图像库对图像进行着色和交换颜色 我正在使用位于此处的原始图像 http korlon com youknowbetter test jpg 并希望它达到橙色的脸 黑色的衣服和头发 就像你在这里看到的那
  • Autohotkey:发送 5 位十六进制 unicode 字符

    我一直在尝试找到一种方法来重新映射键盘并发送 5 位十六进制 unicode 字符 方法如下所述 ahk Send只支持 4 位十六进制代码 U nnnn 我知 道在过去 autohotkey 本身不支持 unicode 因此需要一些函数才
  • 查找用户是否正在通话?

    我想查看用户是否正在使用该应用程序以及他们是否正在打电话 我正在点击此链接来检查用户是否正在通话 iOS 如何检查当前是否正在通话 然而 这看起来像是针对 Objective C 的 我想知道是否有一个 Swift 等价的东西 这是我的尝试
  • ng-click 不适用于 ng-bind-html

    我有这样的 html 模板 scope template span class pointer i class icon refresh pointer i span 我想使用绑定这个模板ng bind html 我尝试使用它 也使用过ng
  • Django JQuery 自动完成

    我正在尝试向我的表单添加自动完成字段 但我无法去上班 我几乎尝试了所有教程 请求发送正常 我收到 200 响应 在开发人员工具窗格中 当我单击请求时 在 响应 选项卡上我会看到整个 HTML 文件 不应该有一个 json 格式的东西吗 这是
  • System.out.println 错误 新程序员

    我正在尝试执行一个简单的输入程序 但出现错误System out println命令 我不知道为什么它不接受该命令并且在我修复它之前无法继续工作 错误说 Multiple markers at this line Syntax error
  • Populate() 引用嵌套在对象数组中

    我正在尝试使用 Show 模型中的数据填充 我的 User 模型中的所有订阅 我尝试过 populate subscriptions show 但它对结果没有任何作用 如果我将订阅设为一个简单的参考数组 如下所示 subscriptions
  • htaccess 只接受来自特定 http_referer 的流量

    我正在尝试设置一个 htaccess 文件来完成以下任务 仅当查看用户来自特定域时才允许查看我的网站 链接 那么 举例来说 我有一个名为 保护 mydomain com 我只希望来自 unprotected mydomain com 上的链
  • 使用 mbox Python 模块解码并访问 mbox 文件

    我需要将电子邮件数据库迁移到 CRM 但有两个问题 我可以访问 mbox 文件 但内容未正确解码 我想创建一个类似数据框的结构 其中包含以下列 日期 发件人 收件人 主题 正文 我已经尝试过以下方法 for i message in enu
  • Java 中整数到字节的转换

    在Java中我们可以做 byte b 5 但是为什么我们不能将相同的参数传递给接受的函数byte myObject testByte 5 public void testByte byte b System out println Its
  • RESTEasy - 动态添加资源类

    通过 RESTEasy 我实现了 Application 的子类来提供单例资源列表 有没有办法稍后动态添加另一个单例 我还没有从 API 文档中找到实现这一点的方法 我自己没有尝试过 但我找到了一篇博客文章 其中描述了这一点 http sa
  • 在 fltk 窗口内绘制 gnuplot 图形

    我正在编写一个程序 它使用用 fltk 打开的窗口绘制 3D 对象 虽然我真的想在同一个窗口 除了 3D 对象 中添加一些 gnuplot 的图形 因为它们比 OpenGl 的图形更漂亮 那可能吗 我正在致力于模拟对象的运动并用 OpenG
  • 通过进程名称取消隐藏进程?

    前段时间我写了一段代码来隐藏 恢复进程窗口 我所做的是这样的 隐藏进程 1 在正在运行的进程中查找进程名 2 将 MainWindowHandle 添加到容器 在本例中为字典 这对于稍后取消隐藏该进程是必要的 3 使用ShowWindow
  • 如何获取视频的最后一帧?

    我想要视频的最后一帧 我的代码如下所示 let asset AVURLAsset AVURLAsset URL videoURL options nil let generate AVAssetImageGenerator AVAssetI
  • 如果文件已经打开,fopen 是否返回 NULL 指针?

    我当时假设fopen回报NULL指针 如果文件已打开 但看起来fopen不返回NULL如果文件已在以下位置打开 w 模式 下面是我用来尝试此操作的代码 但没有收到任何错误 我尝试使用 mingw32 以及 TDM GCC 64 编译器 如果