将C文件指针地址转换为Integer

时间:2015-01-13 04:32:18

标签: c pointers

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

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

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

3 个答案:

答案 0 :(得分:3)

FILE *int

int fildes = fileno(f);

intFILE *

FILE *f = fdopen(fildes, "r+");

答案 1 :(得分:1)

  1. 将文件指针转换为int(文件描述符)
  2. int fileno(FILE * stream); 函数fileno()检查参数流并返回其整数描述符。

    2.将文件描述符转换为文件指针

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

答案 2 :(得分:1)

我不确定执行fopen / fileno / fdopen序列是否会“保持文件打开”(正如当前标记的答案所示) 。或者这可能是平台依赖的,所以你不能以任何方式依赖它。

要毫无疑问地执行您想要的操作,只需使用uintptr_t分配您的FILE *,将其传递给您的Fortran代码(假设它可以处理任何大小{{1}在你的平台上[你说你的OP评论中有64位],然后当Fortran将它传回给你时,将你的uintptr_t分配/投回到你的uintptr_t,并愉快地使用它的所有文件功能。