将 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);
从 int
到 FILE *
:
FILE *f = fdopen(fildes, "r+");
- 将文件指针转换为 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 *
, 并愉快地使用所有的文件功能。
我有一个 C 文件指针,我必须将其传递给 Fortran77 程序(作为整数),以便在 C 程序中再次使用(作为文件指针)以将更多数据写入文本文件。我的 C 技能已经过时了,因为我已经忘记了大部分。谁能告诉我如何将 C FILE 指针转换为整数并返回?非常感谢您的帮助。
我正在维护一个遗留代码,它在一个 10 年前的编译器上运行良好(偶然)。我在移植代码时遇到问题。新的编译器是 intel C 和 Fortran 编译器。
我知道 Fortran 2003 为 C 提供了 ISO 绑定,但由于其他原因我不能在这里使用它们。
从 FILE *
到 int
int fildes = fileno(f);
从 int
到 FILE *
:
FILE *f = fdopen(fildes, "r+");
- 将文件指针转换为 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 *
, 并愉快地使用所有的文件功能。