3
該打印1..10兩次:的Perl:讓open3繼承STDIN,STDOUT,STDERR
seq 10 > /tmp/ten
perl -e 'fork();seek(STDIN,0,0); print <STDIN>' </tmp/ten
我想使用IPC :: Open3做同樣的,但我不能得到那個工作:
perl -MIPC::Open3 -e 'fork();seek(STDIN,0,0); open3(0,1,2,"cat");' < /tmp/ten
perl -MIPC::Open3 -e 'fork();seek(STDIN,0,0); open3(STDIN,STDOUT,STDERR,"cat");' < /tmp/ten
perl -MIPC::Open3 -e 'fork();seek(STDIN,0,0); open3(*STDIN,*STDOUT,*STDERR,"cat");' < /tmp/ten
perl -MIPC::Open3 -e 'fork();seek(STDIN,0,0); open3(\*STDIN,\*STDOUT,\*STDERR,"cat");' < /tmp/ten
這個鬼混很好,但我仍然無法讀取文件兩次。 –
就像我已經解釋的那樣,你要做的是與時間有關,這意味着只有在時機恰到好處時纔會發生。您的原始程序也是如此。你真的不應該做你想做的事!爲了避免隨機性,我用'my $ pid = fork();替換了'fork();'; waitpid($ pid,0)if $ fork;'測試時。這確保了一個過程(父母)在另一個過程(孩子)完成閱讀後只叫'尋求',從而確保了雙重打印。 – ikegami