如何从 fopen FILE 结构中获取文件句柄?

2023-12-30

The fopen http://msdn.microsoft.com/en-us/library/yeby3zcb.aspx函数返回一个指向a的指针FILE结构,应将其视为不透明的值,而不处理其内容或含义。

在 Windows 上,C 运行时是 Windows API 的包装器,并且fopen函数依赖于CreateFile http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx功能。这CreateFile函数返回一个HANDLE,由其他 Windows API 使用。

现在,我需要在一个库的深处使用 Windows API,该库使用fopen and FILE*。那么:有没有办法获得HANDLE来自FILE结构?由于这是特定于编译器的,我指的是 MSVC 运行时库。

我知道这将是一个丑陋的、不可移植的黑客行为,如果微软改变了内部格式,这可能会被破坏FILE...但是我正在一个封闭的系统上(即在 Windows CE 嵌入式系统上)进行开发,并且重构该库将是困难且耗时的。


Use _fileno其次是_get_osfhandle。别忘了_close完成后即可。

编辑:我不清楚_get_osfhandleWinCE 上支持。然而 WinCE 的文档_fileno假设它返回“文件句柄”而不是“描述符”。 YMMV 但这表明你也许可以使用_fileno在 WinCE 上直接返回值作为句柄。

编辑:#2 该理论得到了支持这个人的经历 http://www.equi4.com/pub/am/metakit/2002-February/000512.html.

“如果你看一下我 1 月 29 日发布到列表中的头文件 您可以看到我如何处理文件创建/处理问题。我没有 用句柄替换所有 FILE* 项。请参阅以下片段 文件io.cpp:

#ifndef q4_WCE

  FlushFileBuffers((HANDLE) _get_osfhandle(_fileno(_file)));
  HANDLE h = ::CreateFileMapping((HANDLE)
_get_osfhandle(_fileno(_file)),
                        0, PAGE_READONLY, 0, len, 0);
#else

  FlushFileBuffers((HANDLE) _fileno(_file));
  HANDLE h = ::CreateFileMapping((HANDLE) _fileno(_file),
                    0, PAGE_READONLY, 0, len, 0);
#endif //q4_WCE

事实证明 _fileno 返回一个句柄。你只需要施展它就可以了。”

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

如何从 fopen FILE 结构中获取文件句柄? 的相关文章

随机推荐

  • 在当前歌曲结束之前预加载播放列表中的下一首歌曲

    我制作了一个运行良好的小型媒体播放器 但我想让它在每首歌曲之间不再加载 我知道 preload 属性 但它只在页面第一次加载时预加载音乐 所以我觉得这不起作用 有办法做到这一点吗 也许使用网络音频 API 当您开始播放歌曲时 您可以观看pl
  • MySQL json_arrayagg 左连接没有结果

    使用 MySQL 8 0json arrayagg https dev mysql com doc refman 8 0 en group by functions html function json arrayagg引入后 这使得聚合
  • YouTube Android API:YouTubePlayerFragment 加载微调器

    我正在使用 Android YouTube API 示例在我的应用程序中创建一个 chromeless YouTube 播放器 我遇到的问题是 即使视频已加载并开始播放 缓冲 加载进度条仍会继续显示在视频上 我可以在FragmentDemo
  • 测试 LDAP 与 Active Directory 服务器的连接

    我正在编写一个访问 LDAP 服务器 当前为 OpenLDAP 的 Linux 应用程序 我还想使用 Active Directory 服务器测试该应用程序 因为它可能会在生产中使用 Microsoft 是否有任何免费演示版或试用版可以让我
  • 快速 C++ 单生产者单消费者实现

    我正在寻找一个单生产者 单消费者的 FIFO 实现 它的执行速度比普通的锁定 写入 解锁 信号 waitForSignal 锁定 读取 解锁的东西更快 我正在寻找大多数 POSIX 操作系统 x86 特定的很好 支持的用 C 或 C 编写的
  • 如何以 DRY 方式定义变量

    假设我有一个写入 S3 存储桶的函数 因此 存储桶名称显然是一个 变量 不应硬编码到函数中 例如 开发与生产可能是不同的存储桶 现在 如果我希望函数能够访问它 我需要在至少两个地方使用存储桶名称 在该功能的 IAM 策略中 允许访问存储桶
  • 如何从函数内部确定函数名称

    如果我有一个像这样的 Bash 脚本 bin bash f echo function name f in this case 有什么办法可以做到这一点吗 这可以用在帮助消息中 例如 printf Usage s blah blah bla
  • 当 Facebook 用户在应用程序内发送“发送”对话框时,应用程序可以跟踪收件人吗?

    当用户打开 发送 对话框时 例如 他们可以在 收件人 行中添加或删除人员 如果用户实际按下 发送 应用程序是否有办法跟踪 收件人 行中的人员 不 至少目前不 如果你看一下官方文档 https developers facebook com
  • 在下划线中使用 debounce 函数

    我使用 underscore js 来运行任务 debounce task 100 如何停止执行 debounce debounce不执行任何操作 因此您无法阻止它 它returns一个负责去抖的新函数 如果不想再使用 就使用原来的功能即可
  • 使用 jquery 仅选择按钮前带有某个类的

    我有这个 html 标记 我想使用 jQuery 选择一些行 当按下 cerrar 类的按钮时 我想选择3 tr 在同一个按钮之前有类 hidden tr class main td class table sub title Test t
  • OO 设计原则适用于 Python 吗?

    似乎许多 OO 讨论都使用 Java 或 C 作为示例 例如 Head First 设计模式 这些模式同样适用于 Python 吗 或者如果我遵循设计模式 我最终会用 Python 编写 Java 这显然是一件非常糟糕的事情 最大的区别是
  • 如何设置 JFrame 的最小大小,以阻止用户将其大小调整为更小?

    我有一个JFrame不能小于特定尺寸 否则元素无法正确布局 我尝试过了setMinimumSize 并覆盖getMinimumSize 该框架的方法 但我仍然可以将框架调整为更小 那么 我必须倾听我的界限的变化吗 componentList
  • 使用IDEA的内容设计器时contentPane不能为null

    因此 我正在尝试使用 IntelliJ IDEA 的内容设计器来创建一个简单的 GUI 并且我遵循了使用它的所有指南 但是当从 IDEA 运行时 尚未编译成 JAR 它会返回以下错误 Exception in thread main jav
  • 如何保持 JButton 的透明度 (java)

    我正在制作一款坦克游戏 在我的菜单中 我想使用图片作为 jbuttons 它们是部分透明的 当它们出现在屏幕上时 透明部分会变成白色 i tried using setOpaque but this doesn t work i can t
  • Numpy:array1 中同时也是 array2 元素的元素的掩码

    我想知道是否有一种 numpy 自然的方法可以为 array2 中的元素在 array1 上创建二进制掩码 另一种说法是 数组 1 上的二进制掩码用于数组 1 和 2 的交集 这有效 def bin mask a b return sum
  • MongoDB 删除所有数据库

    我想知道是否有命令可以从我的 MongoDB 中删除所有数据库 我知道如果我只想删除一个数据表 我只需要输入数据库的名称 如下面的代码 但我不想指定它 mongo DB NAME eval db dropDatabase 您可以创建一个 j
  • 为什么 Socket.AcceptAsync 不触发 SocketAsyncEventArgs Completed 事件?

    我正在开发一个服务器应用程序 它将接收消息并做出响应 没什么新鲜的 所以 实际上我正在关注这个答案 https stackoverflow com questions 869744 how to write a scalable tcp i
  • 如何在javafx WebView中启用HTML5本地存储

    有没有办法在 javafx 2 2 WebView 上启用 HTML5 本地存储 无论我做什么 本地存储似乎都被禁用 不可用于 javafx 提供的 WebView 我什至使用它进行了测试http html5test com http ht
  • 如何获取html5音频的持续时间

    我有一个html5
  • 如何从 fopen FILE 结构中获取文件句柄?

    The fopen http msdn microsoft com en us library yeby3zcb aspx函数返回一个指向a的指针FILE结构 应将其视为不透明的值 而不处理其内容或含义 在 Windows 上 C 运行时是