(Windows) 同时打开同一文件

2023-11-27

我正在尝试在 Windows 中打开一个文件以同时进行写入和读取。 我有一个程序(每一秒)写入文件和一个从文件读取的程序。在unix中它可以完美工作,但在windows中不起作用(我无法打开已经打开的文件)。 我用 fopen() 打开文件。

我怎么解决这个问题?

EDIT2:

查看_fsopen它用FILE *,并相应地设置共享标志。

EDIT:

首先,一些代码:这就是我用来打开文件的方式

   FILE* f = NULL;
        int res = fopen_s(&f, "c:\\temp\\File1.txt", "w");
        if (res != 0) return;

        while (true) {
            Sleep(1000);
            fprintf_s(f , "Some data");
        }
        fclose(f); 

读取是在另一个应用程序中,但确实如此fscanf反而。

固定代码:

char d[] = "data";


HANDLE h = CreateFile("c:\\temp\\f.txt", GENERIC_READ | GENERIC_WRITE,
    FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, CREATE_ALWAYS, /*FILE_ATTRIBUTE_NORMAL*/ FILE_FLAG_WRITE_THROUGH, NULL);

if (h == INVALID_HANDLE_VALUE) return 0;

DWORD bytesW;
while(true) {
    Sleep(100);
        WriteFile(h, d, strlen(d), &bytesW, NULL);
}

CloseHandle(h);
return 0; 

Windows 和 Linux 都有默认的打开文件的方式,即fopen默认使用。

在 Windows 中,这意味着阻塞(一次只有一个进程可以打开一个文件)。

在Linux中,它意味着非阻塞。

fopen是一个高级API。要自行选择文件的阻止策略,对于 Windows,您应该使用OpenFile来自 WinAPI。特别是,看看OF_SHARE_* flags.

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

(Windows) 同时打开同一文件 的相关文章

随机推荐

  • verilog模块中的reg和wire有什么区别?

    在verilog模块中我们什么时候应该使用reg以及什么时候应该使用wire 我还注意到有时输出会再次声明为 reg 例如 D 触发器中的 reg Q 我在某处读过这个 过程赋值语句的目标输出必须是 reg 数据类型 什么是程序赋值语句 我
  • r 根据值(不是行数或日期/时间变量)计算滚动平均值

    我对 R 中用于计算滚动平均值的所有软件包都很陌生 我希望你能给我指明正确的方向 我有以下数据作为示例 ms lt c 300 300 300 301 303 305 305 306 308 310 310 311 312 314 315
  • 点击标签不会触发点击事件

    我有这个代码
  • 在 @Html.ActionLink mvc asp.net 中插入 Glyphicons bootstrap

    将在下面的代码中输入 Glyphicons Bootstrap 而不是 编辑 你能给我举个例子吗 Html ActionLink Edit Edit new id Model id rod 提出图像而 不是文字 如果使用 Bootstrap
  • 如何将字符串转换为pdf?

    目前我正在 asp net c 中使用 Restful 服务 以下是pdf我得到的字符串返回 我想将其转换并将其另存为 pdf文件 我该怎么做呢 static string HttpGet string url HttpWebRequest
  • 如何将 MultiDict 转换为嵌套字典

    我想转换来自 Webob 的 POST多字典到嵌套字典 例如 因此 来自以下帖子 name Kyle phone number 1234 phone type home phone number 5678 phone type work 到
  • 在 Cakephp 2+ Shell 中使用组件

    我正在尝试使用 cakephp shell 为我的应用程序实现一项任务 该任务涉及运行一个长时间运行的进程 因此需要使用 shell 该函数要求我使用名为 CommonComponent 的组件内的函数 不幸的是 每当我尝试包含该组件时 我
  • 如何从另一个 .py 文件调用函数? [复制]

    这个问题在这里已经有答案了 file py包含一个名为的函数function 我如何导入它 from file py import function a b 上面给出了一个错误 导入错误 没有名为 file py 的模块 文件不是一个包 一
  • 从另一个脚本运行 PowerShell 脚本

    从另一个 PowerShell 脚本运行 PowerShell 脚本的最佳且正确的方法是什么 我有一个脚本 a ps1 我想从中调用 b ps1 来执行不同的任务 让我知道您的建议 点采购是这里的最佳选择吗 点采购将运行第二个脚本 就好像它
  • 如何在 Eclipse FormEditor 中实现撤消/重做功能?

    我正在开发一个多页表单编辑器来在 Eclipse 中编辑 创建自定义 XML 文件 实现类是MyXMLFormEditor 它扩展了FormEditor FormEditor 的每个页面都扩展了 FormPage 即 MyXMLFormPa
  • “未分配被释放的指针。” malloc、realloc后出错

    我有以下代码的错误 int main point points malloc sizeof point if points NULL printf Memory allocation failed n return 1 other stuf
  • 如何在 Android 中创建自定义控件?

    我想在我的 Android 应用程序中创建一个自定义控件 它将是一个圆形控件 带有一些较小的可移动圆圈 用于指示特定值 有没有办法实现这一点 至少有一些不错的教程可以让我阅读如何创建自定义控件吗 看看定制组件Android 开发指南部分 通
  • 如何从变量运行生成的 SQL?

    我尝试运行我的 SQL 在 T SQL 中 我刚刚生成了一个变量 但我无法让它运行 我想做的是 1 从程序运行大SQL 2 Big SQL生成select SQL 3 像正常选择一样运行生成的sql并像正常一样接收数据 我认为这可以完成sp
  • 如果找到零,Python乘法表达式的计算速度会更快吗?

    假设我有一个有很多被乘数的乘法表达式 小表达式 expression a b c d w 例如 c 为 x 1 d 为 y 2 16 k 为 xy 60 x y 是数字我知道 c d k j 可能为零我编写表达式的顺序对于更快的评估是否重要
  • ASP.NET:在应用程序的预启动初始化阶段无法调用此方法

    我正在尝试让 ASP NET MVC 3 站点在 IIS 6 0 上运行 目前 当我从服务器请求页面时 会出现以下错误 解析器错误消息 在应用程序的预启动初始化阶段无法调用此方法 在这一行
  • 检测字符串是否采用 UTF-8 双重编码

    我需要处理大量的短字符串 主要是俄语 但任何其他语言都是可能的 包括来自键盘上行走的猫的随机垃圾 其中一些字符串将以 UTF 8 编码两次 我需要可靠地检测给定的字符串是否是双重编码的 并修复它 我应该在不使用任何外部库的情况下执行此操作
  • Spring缓存给定的请求

    我正在使用 Spring MVC 编写一个 Web 应用程序 我有一个如下所示的界面 public interface SubscriptionService public String getSubscriptionIDForUSer S
  • 通过JavaScript向手机发送短信

    我是 JavaScript 初学者 我想开发一个JavaScript来从我的笔记本电脑或手机发送短信到手机 启用java 但计算机选项会更好 有谁能够帮助我 你可以试试这些人 http www zeepmobile com blog p 1
  • 是否可以在 Google Chrome 扩展程序中确定选项卡的打开方式?

    我正在寻找一种方法来确定 Google Chrome 扩展程序中给定选项卡的开启器 父选项卡 我查看了 Tab 的文档 但似乎没有任何内容可以产生此信息 http code google com chrome extensions tabs
  • (Windows) 同时打开同一文件

    我正在尝试在 Windows 中打开一个文件以同时进行写入和读取 我有一个程序 每一秒 写入文件和一个从文件读取的程序 在unix中它可以完美工作 但在windows中不起作用 我无法打开已经打开的文件 我用 fopen 打开文件 我怎么解