我嘗試通過命名管道建立一些Fortran進程之間的通信。但是,即使考慮到一個非常簡單的玩具例子,我也會遇到麻煩。這裏是我的代碼:命名管道和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
我不沒有任何錯誤信息。另外,我嘗試修改格式爲< - > unformatted的打開語句,錯誤處理等錯誤= 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
克++ 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
什麼是應該做的'年底program'前'return'的
stream
訪問?它在主程序中是不允許的,許多編譯器會發出錯誤。也沒有明智的理由。 –美元符號也是可疑的,它實際上是在第6列嗎? –
我被告知,如果沒有返回,管道可能無法正確關閉。 $符號是換行符。我以前從來沒有遇到過麻煩。如果沒有換行符,我會成爲編譯錯誤。刪除退貨不會導致任何更改。 – user3240157