コンテンツにスキップ

パイプ (コンピュータ)

出典: フリー百科事典『ウィキペディア(Wikipedia)』
ある端末上で3つのパイプで繋いだプログラムを実行する際の入出力の流れ

Unix(pipe) (pipeline) 

[]


使

 #使

UNIXOSpipe

3

1Software ToolsUNIXUnixOS

forkUnix[1]

 | 使 (stdout)  (stdin) 

f, g, h  h(g(f(x)))    (hgf)(x)  |  ( progF <x) | progG | progH  ( progF | progG | progH ) <x [2]

 SIGPIPE  SIGPIPE SIGPIPE SIGPIPE  End Of File 

使[]


| 
grep 札幌市 Address.txt | a2ps | lpr 



(一) Address.txt 

(二) a2ps 

(三)



使
grep 札幌市 Address.txt > sapporo.txt
a2ps < sapporo.txt > print.ps
lpr < print.ps



1223使3I/O使



UNIX

UNIXUNIX

[]


 (stderr)  csh "|"  "|&" 使Bourne Shell  2>&1  stderr  stdout stdout[3]

Pipemill[]


使


command | while read var1 var2 ...; do
   # $var1, $var2 といった変数を使って行毎に処理
   # (なお、この場合の while ループはサブシェルとして実行されるので
   # 変数はwhileループが終了した後は使えなくなる)
   done

 "pipemill" 

[]


pipe() 2flush

1 fork() 使

調fork使

名前付きパイプ[編集]


POSIX(UNIX)mkfifo()  mknod() 使

 mkfifo cp cp -r tar ls tar 

[]


OS5000100Linux65,536

[]


netcat使TCP/IP

[]


Unix1973UNIX[4]MS-DOSOS/2Microsoft WindowsBeOSOS[5]

UNIX1960Ken LochnerDTSS'communication files'[6]UNIX[7]

ApplemacOSMac OS XUNIX OSpipe使 Automator[8]

UNIXOS[]


UNIXOS

MS-DOS[]


MS-DOSOS

Windows[]


WindowsCreateNamedPipe() \\.\pipe\Windows 

Windows

脚注[編集]

  1. ^ Advice from Doug Mcilroy
  2. ^ この例に使用するカッコは、サブシェルで実行することを意味する ( ) である必要はなく、単なるグルーピングである { } で構わないがそうすると最後に ; が必要であるなど構文的に煩雑なため、( ) を使っている。
  3. ^ パイプの場合はこのような順序で理解すれば良いが、ファイルへのリダイレクトにおいて、2>&1 >filename という順序ではうまくいかず、>filename 2>&1 という順で書かねばならない、というのがなぜなのか、を正しく理解するのは少々骨が折れる。
  4. ^ Pipes: A Brief Introduction by The Linux Information Project (LINFO)
  5. ^ シェルの構文とpipeシステムコールを、本来きちんと分けて書くべき。
  6. ^ http://www.cs.rit.edu/~swm/history/DTSS.doc
  7. ^ The Evolution of the Unix Time-sharing System”. Nokia Bell Labs (1996年). 2014年6月6日時点のオリジナルよりアーカイブ。2021年7月22日閲覧。
  8. ^ Sal Soghoian on MacBreak Episode 3 "Enter the Automatrix"

関連項目[編集]

外部リンク[編集]