将 C 文件指针地址转换为整数

Convert C file pointer address into Integer

我有一个 C 文件指针,我必须将其传递给 Fortran77 程序(作为整数),以便在 C 程序中再次使用(作为文件指针)以将更多数据写入文本文件。我的 C 技能已经过时了,因为我已经忘记了大部分。谁能告诉我如何将 C FILE 指针转换为整数并返回?非常感谢您的帮助。

我正在维护一个遗留代码,它在一个 10 年前的编译器上运行良好(偶然)。我在移植代码时遇到问题。新的编译器是 intel C 和 Fortran 编译器。

我知道 Fortran 2003 为 C 提供了 ISO 绑定,但由于其他原因我不能在这里使用它们。

FILE *int

int fildes = fileno(f);

intFILE *:

FILE *f = fdopen(fildes, "r+");
  1. 将文件指针转换为 int(文件描述符)

int fileno(FILE *stream); 函数 fileno() 检查参数流和 returns 它的整数描述符。

2.Converting 文件描述符到文件指针

FILE *fdopen(int fildes, const char *mode); fdopen 函数将流与文件描述符相关联。

我不确定执行 fopen/fileno/fdopen 序列是否会像您期望的那样 "keep a file open"(正如当前标记的答案所暗示的那样) ).或者这可能是平台相关的,因此您不能以任何方式依赖它。

要毫无疑问地做你想做的事,只需简单地使用 uintptr_t 将你的 FILE * 分配给,将它传递给你的 Fortran 代码(假设它可以处理任何大小 uintptr_t 在您的平台上 [您在 OP 的评论中说它是 64 位]),然后当 Fortran 将它传回给您时,assign/cast 您的 uintptr_t 返回给您的 FILE *, 并愉快地使用所有的文件功能。