命名管道和fortran的麻烦

时间:2014-02-27 16:40:12

标签: linux fortran named-pipes gfortran

我尝试通过命名管道在一些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

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

注意:我实际感兴趣的程序需要在#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

1 个答案:

答案 0 :(得分:3)

这对我有用。不知何故,action="write"存在问题。

    program testfifo

    implicit none

    integer status

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

    open(unit=11,file="MyNamedPipe",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

,我使用了stream访问权限