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