繁体   English   中英

在FORTRAN和C ++之间使用管道

[英]Use Pipe between FORTRAN and C++

我试图使用管道方法将大量数据(双数)从FORTRAN程序传递到C ++程序。

我遵循了http://msdn.microsoft.com/en-us/library/ms682499(VS.85).aspx的C ++部分。 但是对于FORTRAN部分(即子处理器),我不知道如何正确写入数据。 我是否必须使用WRITE(*,*)在控制台上写所有数字,然后使用C ++程序读取它?

我的FORTRAN代码写入数据:

        DO 281 I=1,NDOF 
        DO 280 J=1,UBW              
        IF (S(I,J).NE.0) THEN      
          WRITE (*, 2770) I,(J+I-1)
          WRITE (*,2760) (S(I,J))          
        ENDIF        
 280    CONTINUE         
 281    CONTINUE

我认为我的FORTRAN部分不正确,因为在控制台上编写会花费很多时间! (它甚至比通过文件传递数据还要慢!!!)任何建议都值得赞赏。

您提到写入文件。 您是否考虑过使用fortran程序的二进制输出以及使用fread在C ++端使用二进制输入? 由于不涉及解析,因此速度明显加快。 如果那仍然很慢,那么管道将无法真正解决您的速度问题。

如果坚持要使用格式化的输出和管道,那么就这样吧。 假设您的fortran程序称为fort,而您的c ++程序cpp。 检查您的fortran输出

fort > xxx.txt

在C ++方面,如果它只是一种通信方式,则实际上并不需要使用createpipe,而只需使用stdin。 这样很容易测试使用

type xxx.txt | cpp

当一切正常时使用

fort | cpp

使用MS文件/管道处理可能会更快,但是您仍然需要将数据读入缓冲区并对其进行sscanf扫描(这是CI / O的作用),因此您也可以仅使用stdin中的CI / O和scanf。 如果以二进制形式执行此操作,则可以忽略整个scanf部分。 保留标准内容的优点是,您以后可以很轻松地将其移植到Unix或其他操作系统。

另一种选择是将Fortran程序转换为库,然后从C ++调用它。 这样,您只会搞乱数组而不是I / O。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM