代码之家  ›  专栏  ›  技术社区  ›  lornova

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

  •  26
  • lornova  · 技术社区  · 14 年前

    fopen FILE 结构,应被视为一个不透明的值,而不涉及其内容或含义。

    fopen 功能依赖于 CreateFile 功能。这个 CreateFile 函数返回 HANDLE ,它被其他Windows API使用。

    现在,我需要在使用 福潘 FILE* . 所以:有没有办法 文件 结构?因为这是特定于编译器的,我是说在MSVC运行库上。

    我知道这将是一个丑陋的、不可移植的黑客,如果微软改变 文件

    3 回复  |  直到 10 年前
        1
  •  16
  •   Steve Townsend    14 年前

    使用 _fileno _get_osfhandle . 别忘了 _close 当你做完的时候。

    _去找奥斯福汉德尔 支持WinCE。但是WinCE的文档 _文件号 假设它返回的是“文件句柄”而不是“描述符”。但这表明你可以 _文件号

    编辑:#2该理论得到了 this person's experience .

    您可以看到我是如何处理文件创建/处理问题的。我没有 用句柄替换所有文件*项。请参阅以下片段

    #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返回一个句柄。你只要把它扔了就行了。”

        2
  •  5
  •   Didier Trosset    14 年前

    在Linux上,有 int fileno(FILE *); open 函数)从 FILE* .

    我不知道它是否适用于Windows并返回句柄?

        3
  •  3
  •   Zombo    12 年前

    对于C,试试这个

    HANDLE foo = (HANDLE)_get_osfhandle(fileno(fopen("bar.txt", "w")));