Linux   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了linux – 命名管道和fortran的麻烦大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我尝试通过命名管道在一些fortran进程之间建立通信.然而,虑到一个非常简单的玩具示例,我遇到了麻烦.这是我的代码: program testfifo implicit none Integer status write(*,*) "hello" call flush() open(unit=11,file="MyNamedPipe",action='write',
我尝试通过命名管道在一些fortran进程之间建立通信.然而,虑到一个非常简单的玩具示例,我遇到了麻烦.这是我的代码

program testfifo

  implicit none

  Integer status

  write(*,*) "Hello"
  call flush()

  open(unit=11,file="MyNamedPipe",action='write',form ='unformatted'
 $,iostat=status);
  close(11)

  write(*,*) "by"
  call flush()

  return
  end program testfifo

如果我用普通文件运行它,它可以工作:

/fortran > rm -f MyNamedPipe && touch MyNamedPipe
/fortran > gfortran -o testfifo testfifo.f 
/fortran > ./testfifo 
 Hello
 by

然而,运行fifo我的程序卡住了:

/fortran > rm -f MyNamedPipe && mkfifo MyNamedPipe
/fortran > gfortran -o testfifo testfifo.f 
/fortran > ./testfifo 
 Hello
^C

我没有收到任何错误消息.另外,我尝试改变格式化的开放语句< - >未格式化,错误处理等错误= 100,但它没有帮助.以下是我的一些系统统计信息:

Linux lin45 3.2.0-4-amd64#1 SMP Debian 3.2.54-2 x86_64 GNU / Linux
gfortran 4.6.2
gcc 4.6.2
g 4.6.2

我正在网上搜索这个问题的解决方案已经有一段时间了.如果有人可以帮助我,我会很高兴.此外,如果有人能够毫无困难地运行代码,我会感兴趣,如果这可能是由于任何系统/编译器问题.谢谢.

注意:我真正感兴趣的程序需要在#n进程之间进行通信,因此,我认为,我不能使用普通管道.此外,已经有一个使用管道设置的代码版本.但是,它只能在Mac上运行.我的任务是在Linux下运行它. Mac规格如下:

Mac OS X 10.7.5
Xcode 4.5
gfortran 4.6.1
gcc 4.2.1
g 4.2.1

解决方法

这适合我.不知何故,action =“write”是有问题的.

program testfifo

    implicit none

    Integer status

    write(*,*) "Hello"
    call flush()

    open(unit=11,access='stream'                    &
 &,form ='unformatted',iostat=status)
    write(11) status
    print *,status
    close(11)

    write(*,*) "by"
    call flush()

    end program testfifo

因为http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30162,我使用了流访问

大佬总结

以上是大佬教程为你收集整理的linux – 命名管道和fortran的麻烦全部内容,希望文章能够帮你解决linux – 命名管道和fortran的麻烦所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。