เช เชฒเซเช เชฏเซเชจเชฟเชเซเชธ เชเชฐเซเชจเชฒเชฎเชพเช เชชเชพเชเชชเชฒเชพเชเชจเซเชธเชจเชพ เช
เชฎเชฒเซเชเชฐเชฃเชจเซเช เชตเชฐเซเชฃเชจ เชเชฐเซ เชเซ. เชนเซเช เชเชเชเช เช
เชเชถเซ เชจเชฟเชฐเชพเชถ เชนเชคเซ เชเซ เชคเชพเชเซเชคเชฐเชจเชพ เชฒเซเช "
เชเชชเชฃเซ เชถเซเช เชตเชพเชค เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช?
เชชเชพเชเชชเชฒเชพเชเชจเซเชธ, "เชเชฆเชพเช เชฏเซเชจเชฟเชเซเชธเชฎเชพเช เชธเซเชฅเซ เชฎเชนเชคเซเชตเชจเซ เชถเซเชง," เช เชจเชพเชจเชพ เชเชพเชฐเซเชฏเชเซเชฐเชฎเซเชจเซ เชเชเชธเชพเชฅเซ เชเซเชกเชตเชพเชจเซ เช เชเชคเชฐเซเชเชค เชฏเซเชจเชฟเชเซเชธ เชซเชฟเชฒเชธเซเชซเซเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชฒเชพเชเซเชทเชฃเชฟเชเชคเชพ เชเซ, เชคเซเชฎเช เชเชฆเซเชถ เชตเชพเชเซเชฏ เชชเชฐ เชเช เชชเชฐเชฟเชเชฟเชค เชเชฟเชนเซเชจ เชเซ:
$ echo hello | wc -c
6
เช เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชเชฐเซเชจเชฒ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเซ เชชเชพเชกเชตเชพเชฎเชพเช เชเชตเซเชฒ เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชชเชฐ เชเชงเชพเชฐ เชฐเชพเชเซ เชเซ pipe
, เชเซ เชฆเชธเซเชคเชพเชตเซเชเซเชเชฐเชฃ เชชเซเชทเซเช เซ เชชเชฐ เชตเชฐเซเชฃเชตเซเชฒ เชเซ
เชชเชพเชเชชเชฒเชพเชเชจ เชเชเชคเชฐเชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชธเชเชเชพเชฐ เชฎเชพเชเซ เชเช เชฆเชฟเชถเชพเชนเซเชจ เชเซเชจเชฒ เชชเซเชฐเซ เชชเชพเชกเซ เชเซ. เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเช เชเชจเชชเซเช (เชเชจเซเชก เชฒเชเซ) เช เชจเซ เชเชเชเชชเซเช (เชเชจเซเชก เชตเชพเชเชเซ) เชนเซเชฏ เชเซ. เชชเชพเชเชชเชฒเชพเชเชจเชจเชพ เชเชจเชชเซเช เชชเชฐ เชฒเชเชพเชฏเซเชฒ เชกเซเชเชพ เชเชเชเชชเซเช เชชเชฐ เชตเชพเชเชเซ เชถเชเชพเชฏ เชเซ.
เชเซเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชชเชพเชเชชเชฒเชพเชเชจ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ
pipe(2)
, เชเซ เชฌเซ เชซเชพเชเชฒ เชตเชฐเซเชฃเชจเชเชฐเซเชคเชพ เชชเชฐเชค เชเชฐเซ เชเซ: เชเช เชชเชพเชเชชเชฒเชพเชเชจเชจเชพ เชเชจเชชเซเชเชจเซ เชเชฒเซเชฒเซเช เชเชฐเซ เชเซ, เชฌเซเชเซ เชเชเชเชชเซเชเชจเซ.
เชเชชเชฐเซเชเซเชค เชเชฆเซเชถเชฎเชพเชเชฅเซ เชเซเชฐเซเชธ เชเชเชเชชเซเช เชชเชพเชเชชเชฒเชพเชเชจเชจเซ เชฐเชเชจเชพ เช เชจเซ เชคเซเชจเชพ เชฆเซเชตเชพเชฐเชพ เชเช เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชฎเชพเชเชฅเซ เชฌเซเชเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชฎเชพเช เชกเซเชเชพเชจเซ เชชเซเชฐเชตเชพเชน เชฆเชฐเซเชถเชพเชตเซ เชเซ:
$ strace -qf -e execve,pipe,dup2,read,write
sh -c 'echo hello | wc -c'
execve("/bin/sh", ["sh", "-c", "echo hello | wc -c"], โฆ)
pipe([3, 4]) = 0
[pid 2604795] dup2(4, 1) = 1
[pid 2604795] write(1, "hellon", 6) = 6
[pid 2604796] dup2(3, 0) = 0
[pid 2604796] execve("/usr/bin/wc", ["wc", "-c"], โฆ)
[pid 2604796] read(0, "hellon", 16384) = 6
[pid 2604796] write(1, "6n", 2) = 2
เชชเชฟเชคเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเซเชฒ เชเชฐเซ เชเซ pipe()
เชฎเชพเชเชจเซเช เชฅเชฏเซเชฒ เชซเชพเชเชฒ เชตเชฐเซเชฃเชจเชเชฐเซเชคเชพเช เชฎเซเชณเชตเชตเชพ เชฎเชพเชเซ. เชเช เชฌเชพเชณเช เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเช เชนเซเชจเซเชกเชฒ เชชเชฐ เชฒเชเซ เชเซ, เช
เชจเซ เชฌเซเชเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชฌเซเชเชพ เชนเซเชจเซเชกเชฒเชฎเชพเชเชฅเซ เชธเชฎเชพเชจ เชกเซเชเชพ เชตเชพเชเชเซ เชเซ. เชถเซเชฒ stdin เช
เชจเซ stdout เชจเซ เชฎเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชตเชฐเซเชฃเชจเชเชฐเซเชคเชพ 2 เช
เชจเซ 3 เชจเซ "เชจเชพเชฎ เชฌเชฆเชฒเชตเชพ" เชฎเชพเชเซ dup4 เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ.
เชชเชพเชเชชเซ เชตเชฟเชจเชพ, เชถเซเชฒเชจเซ เชซเชพเชเชฒเชฎเชพเช เชเช เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซเช เชชเชฐเชฟเชฃเชพเชฎ เชฒเชเชตเซเช เชชเชกเชถเซ เช เชจเซ เชซเชพเชเชฒเชฎเชพเชเชฅเซ เชกเซเชเชพ เชตเชพเชเชเชตเชพ เชฎเชพเชเซ เชคเซเชจเซ เชฌเซเชเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชฎเชพเช เชชเชพเชธ เชเชฐเชตเซเช เชชเชกเชถเซ. เชชเชฐเชฟเชฃเชพเชฎเซ, เช เชฎเซ เชตเชงเซ เชธเชเชธเชพเชงเชจเซ เช เชจเซ เชกเชฟเชธเซเช เชเชเซเชฏเชพเชจเซ เชฌเชเชพเชก เชเชฐเซเชถเซเช. เชเซ เชเซ, เชชเชพเชเชชเชฒเชพเชเชจเซเชธ เชฎเชพเชคเซเชฐ เชเชเชฒเชพ เชฎเชพเชเซ เช เชธเชพเชฐเซ เชจเชฅเซ เชเชพเชฐเชฃ เชเซ เชคเซเช เชคเชฎเชจเซ เช เชธเซเชฅเชพเชฏเซ เชซเชพเชเชฒเซเชจเชพ เชเชชเชฏเซเชเชจเซ เชเชพเชณเชตเชพ เชฆเซ เชเซ:
เชเซ เชเซเช เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชพเชฒเซ เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเชเชฅเซ เชตเชพเชเชเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซ เชฐเชนเซ เชนเซเชฏ เชคเซ
read(2)
เชกเซเชเชพ เชเชชเชฒเชฌเซเชง เชจ เชฅเชพเชฏ เชคเซเชฏเชพเช เชธเซเชงเซ เชฌเซเชฒเซเช เชเชฐเชถเซ. เชเซ เชเซเช เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชธเชเชชเซเชฐเซเชฃ เชชเชพเชเชชเชฒเชพเชเชจ เชชเชฐ เชฒเชเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซ เชเซ, เชคเซ เชชเชเซwrite(2)
เชฒเชเชตเชพ เชฎเชพเชเซ เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเชเชฅเซ เชชเซเชฐเชคเซ เชกเซเชเชพ เชตเชพเชเชเชตเชพเชฎเชพเช เชจ เชเชตเซ เชคเซเชฏเชพเช เชธเซเชงเซ เชฌเซเชฒเซเช เชเชฐเชถเซ.
POSIX เชเชฐเซเชฐเชฟเชฏเชพเชคเชจเซ เชเซเชฎ, เช เชเช เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ เชเซเชฃเชงเชฐเซเชฎ เชเซ: เชธเซเชงเซเชจเซ เชชเชพเชเชชเชฒเชพเชเชจ เชชเชฐ เชฒเชเชตเซเช PIPE_BUF
เชฌเชพเชเชเซเชธ (เชเชเชพเชฎเชพเช เชเชเชพ 512) เช
เชฃเซ เชนเซเชตเชพ เชเซเชเช เชเซเชฅเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเช เชชเชพเชเชชเชฒเชพเชเชจ เชฆเซเชตเชพเชฐเชพ เชเชเชฌเซเชเชพ เชธเชพเชฅเซ เชเชตเซ เชฐเซเชคเซ เชตเชพเชคเชเซเชค เชเชฐเซ เชถเชเซ เชเซ เชจเชฟเชฏเชฎเชฟเชค เชซเชพเชเชฒเซ (เชเซ เชเชตเซ เชเซเชฐเชเชเซ เชเชชเชคเซ เชจเชฅเซ) เชเชฐเซ เชถเชเชคเซ เชจเชฅเซ.
เชจเชฟเชฏเชฎเชฟเชค เชซเชพเชเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเชคเซ เชตเชเชคเซ, เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชคเซเชจเชพ เชคเชฎเชพเชฎ เชเชเชเชชเซเชเชจเซ เชคเซเชจเชพ เชชเชฐ เชฒเชเซ เชถเชเซ เชเซ เช เชจเซ เชคเซเชจเซ เชฌเซเชเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชฎเชพเช เชชเชธเชพเชฐ เชเชฐเซ เชถเชเซ เชเซ. เช เชฅเชตเชพ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเช เช เชคเซเชฏเชเชค เชธเชฎเชพเชเชคเชฐ เชฎเซเชกเชฎเชพเช เชเชพเชฐเซเชฏ เชเชฐเซ เชถเชเซ เชเซ, เชเซเชฏเชพเชฐเซ เชฒเชเชตเชพ เช เชฅเชตเชพ เชตเชพเชเชเชตเชพเชจเซเช เชชเซเชฐเซเชฃ เชฅเชพเชฏ เชคเซเชฏเชพเชฐเซ เชเชเชฌเซเชเชพเชจเซ เชธเซเชเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชฌเชพเชนเซเชฏ เชธเชฟเชเซเชจเชฒเชฟเชเช เชฎเชฟเชเซเชจเชฟเชเชฎ (เชเซเชฎ เชเซ เชธเซเชฎเชพเชซเซเชฐ) เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ. เชเชจเซเชตเซเชฏเชฐ เช เชฎเชจเซ เช เชฌเชงเซ เชเชเชเชเชฎเชพเชเชฅเซ เชฌเชเชพเชตเซ เชเซ.
เช เชฎเซ เชถเซเช เชถเซเชงเซ เชฐเชนเซเชฏเชพ เชเซเช?
เชนเซเช เชคเซเชจเซ เชธเชฐเชณ เชถเชฌเซเชฆเซเชฎเชพเช เชธเชฎเชเชพเชตเซเชถ เชเซเชฅเซ เชคเชฎเชพเชฐเชพ เชฎเชพเชเซ เชเชจเซเชตเซเชฏเชฐ เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชถเชเซ เชคเซเชจเซ เชเชฒเซเชชเชจเชพ เชเชฐเชตเซ เชธเชฐเชณ เชฌเชจเซ. เชคเชฎเชพเชฐเซ เชฎเซเชฎเชฐเซเชฎเชพเช เชฌเชซเชฐ เช เชจเซ เช เชฎเซเช เชธเซเชฅเชฟเชคเชฟ เชซเชพเชณเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ. เชฌเชซเชฐเชฎเชพเชเชฅเซ เชกเซเชเชพ เชเชฎเซเชฐเชตเชพ เช เชจเซ เชฆเซเชฐ เชเชฐเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฐเซ เชเชพเชฐเซเชฏเซเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ. เชซเชพเชเชฒ เชตเชฐเซเชฃเชจเชเชฐเซเชคเชพเช เชชเชฐ เชตเชพเชเชเชตเชพ เช เชจเซ เชฒเชเชตเชพเชจเซ เชเชพเชฎเชเซเชฐเซ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชซเชเชเซเชถเชจเชจเซ เชเซเชฒ เชเชฐเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฐเซ เชเซเชเชฒเชพเช เชฎเชพเชงเซเชฏเชฎเซเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ. เช เชจเซ เชเชชเชฐ เชตเชฐเซเชฃเชตเซเชฒ เชตเชฟเชถเชฟเชทเซเช เชตเชฐเซเชคเชจเชจเซ เช เชฎเชฒเชฎเชพเช เชฎเซเชเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฐเซ เชคเชพเชณเชพเชเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ.
เชนเชตเซ เช เชฎเซ เช เชฎเชพเชฐเชพ เช เชธเซเชชเชทเซเช เชฎเชพเชจเชธเชฟเช เชฎเซเชกเชฒเชจเซ เชชเซเชทเซเชเชฟ เชเชฐเชตเชพ เช เชฅเชตเชพ เชเซเชเซ เชธเชพเชฌเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชคเซเชเชธเซเชตเซ เชฒเซเชฎเซเชชเชฒเชพเชเช เชนเซเช เชณ เชเชฐเซเชจเชฒ เชธเซเชฐเซเชค เชเซเชกเชจเซ เชชเซเชเชชเชฐเช เชเชฐเชตเชพ เชฎเชพเชเซ เชคเซเชฏเชพเชฐ เชเซเช. เชชเชฐเชเชคเซ เชนเชเชฎเซเชถเชพ เช เชจเชชเซเชเซเชทเชฟเชค เชฎเชพเชเซ เชคเซเชฏเชพเชฐ เชฐเชนเซ.
เชเชชเชฃเซ เชเซเชฏเชพเช เชเซเช เชฐเชนเซเชฏเชพ เชเซเช?
เชฎเชจเซ เชเชฌเชฐ เชจเชฅเซ เชเซ เชฎเชพเชฐเซ เชชเซเชฐเชเซเชฏเชพเชค เชชเซเชธเซเชคเชเชจเซ เชจเชเชฒ เชเซเชฏเชพเช เชเซ "
TUHS เชเชฐเซเชเชพเชเชตเซเชธเชฎเชพเช เชญเชเชเชตเซเช เช เชฎเซเชฏเซเชเชฟเชฏเชฎเชจเซ เชฎเซเชฒเชพเชเชพเชค เชฒเซเชตเชพ เชเซเชตเซเช เชเซ. เชเชชเชฃเซ เชเชชเชฃเซ เชธเชนเชฟเชฏเชพเชฐเซ เชเชคเชฟเชนเชพเชธ เชเซเช เชถเชเซเช เชเซเช เช เชจเซ เชเซเชจเซ เชเซเชช เช เชจเซ เชชเซเชฐเชฟเชจเซเชเซเชธเชฎเชพเชเชฅเซ เช เชฌเชงเซ เชธเชพเชฎเชเซเชฐเซ เชฅเซเชกเซ-เชฅเซเชกเซ-เชฅเซเชกเซ-เชฅเซเชกเซ-เชฅเซเชกเซ-เชฅเซเชกเซ-เชฅเซเชกเซ เชตเชพเชฐเชฎเชพเช เชชเซเชจเชเชชเซเชฐเชพเชชเซเชค เชเชฐเชตเชพเชจเชพ เชเชฃเชพ เชตเชฐเซเชทเซเชจเชพ เชชเซเชฐเชฏเชคเซเชจเซ เชฎเชพเชเซ เชฎเชจเซ เชเชฆเชฐ เชเซ. เช เชจเซ เชนเซเช เชคเซ เชเซเชเชกเชพเช เชตเชฟเชถเซ เชคเซเชตเซเชฐเชชเชฃเซ เชตเชพเชเซเชซ เชเซเช เชเซ เชนเชเซ เชชเชฃ เชเซเชฎ เชเซ.
เชเชจเซเชตเซเชฏเชฐเซเชธเชจเชพ เชชเซเชฐเชพเชเซเชจ เชเชคเชฟเชนเชพเชธ เชตเชฟเชถเซเชจเซ เช เชฎเชพเชฐเซ เชเชฟเชเซเชเชพเชธเชพเชจเซ เชธเชเชคเซเชทเซเชฏเชพ เชชเชเซ, เช เชฎเซ เชธเชฐเชเชพเชฎเชฃเซ เชฎเชพเชเซ เชเชงเซเชจเชฟเช เชเชฐเซเชจเชฒเซเชจเซ เชเซเช เชถเชเซเช เชเซเช.
เชฎเชพเชฐเซเช เชฆเซเชตเชพเชฐเชพ, pipe
เชเซเชทเซเชเชเชฎเชพเช เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชจเชเชฌเชฐ 42 เชเซ sysent[]
. เชธเชเชฏเซเช?
เชชเชฐเชเชชเชฐเชพเชเชค เชฏเซเชจเชฟเชเซเชธ เชเชฐเซเชจเชฒเซ (1970-1974)
เชฎเชจเซ เชเซเช เชจเชฟเชถเชพเชจ เชฎเชณเซเชฏเชพ เชจเชฅเซ pipe(2)
เชจ เชคเซ เช
เชเชฆเชฐ
TUHS เชเชฃเชพเชตเซ เชเซ เชเซ
เชฏเซเชจเชฟเชเซเชธ 1973เชเซ เชเชตเซเชคเซเชคเชฟ เช เชเชธเซเชฎเซเชฌเชฒเซ เชญเชพเชทเชพเชฎเชพเช เชฒเชเชพเชฏเซเชฒ เชเชฐเซเชจเชฒ เชธเชพเชฅเซเชจเซเช เชเซเชฒเซเชฒเซเช เชธเชเชธเซเชเชฐเชฃ เชนเชคเซเช, เชชเชฐเชเชคเซ เชชเชพเชเชชเชฒเชพเชเชจเซเชธ เชธเชพเชฅเซเชจเซเช เชชเซเชฐเชฅเชฎ เชธเชเชธเซเชเชฐเชฃ เชชเชฃ เชนเชคเซเช. XNUMX เชฆเชฐเชฎเชฟเชฏเชพเชจ, เชคเซเชฐเซเชเซ เชเชตเซเชคเซเชคเชฟเชจเซ เชธเซเชงเชพเชฐเชตเชพ เชฎเชพเชเซ เชเชพเชฎ เชนเชพเชฅ เชงเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช, เชเชฐเซเชจเชฒเชจเซ C เชฎเชพเช เชซเชฐเซเชฅเซ เชฒเชเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช, เช เชจเซ เชคเซเชฅเซ เชฏเซเชจเชฟเชเซเชธเชจเซ เชเซเชฅเซ เชเชตเซเชคเซเชคเชฟ เชฆเซเชเชพเช เชนเชคเซ.
เชเช เชตเชพเชเชเชจเซ เชเช เชฆเชธเซเชคเชพเชตเซเชเชจเซเช เชธเซเชเซเชจ เชฎเชณเซเชฏเซเช เชเซเชฎเชพเช เชกเช เชฎเซเชเชฟเชฒเชฐเซเชฏเซ "เชฌเชเซเชเชพเชจเซ เชจเชณเซ เชเซเชตเชพ เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธเชจเซ เชเชจเซเชเซเช เชเชฐเชตเชพเชจเซ" เชตเชฟเชเชพเชฐ เชชเซเชฐเชธเซเชคเชพเชตเชฟเชค เชเชฐเซเชฏเซ.
เชฌเซเชฐเชพเชฏเชจ เชเชฐเซเชจเชฟเชเชจเชจเชพ เชชเซเชธเซเชคเชเชฎเชพเช
เชเซเชฏเชพเชฐเซ เชฏเซเชจเชฟเชเซเชธ เชฌเชนเชพเชฐ เชเชตเซเชฏเซเช, เชคเซเชฏเชพเชฐเซ เชเซเชฐเซเชเซเชจ เชชเซเชฐเชคเซเชฏเซเชจเชพ เชฎเชพเชฐเชพ เชเชเชฐเซเชทเชฃเชจเซ เชเชพเชฐเชฃเซ เชฎเชจเซ OSเชจเชพ เชฒเซเชเช, เชเซเชจ เชฅเซเชฎเซเชชเชธเชจเชจเซ เชชเซเชเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชฎเชพเช เชฒเชเชพเชฏเซเชฒ เชกเซเชเชพเชจเซ เชฎเชพเชคเซเชฐ เชเชชเชเชฐเชฃเชฎเชพเช เช เชจเชนเซเช, เชชเชฃ เชฌเซเชเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชฎเชพเช เชเชเชเชชเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชชเชฃ เชชเชฐเชตเชพเชจเชเซ เชเชชเชตเชพ เชฎเชพเชเซ. เชเซเชจเซ เชจเชเซเชเซ เชเชฐเซเชฏเซเช เชเซ เชคเซ เชถเชเซเชฏ เชเซ. เชเซ เชเซ, เชเชเชพเชฎเชพเช เชเชเชพ เชคเชฐเซเชเซ, เชคเซ เชเชเซเชเซ เชเซ เชเซ เชฆเชฐเซเช เชธเชฟเชธเซเชเชฎ เชเชพเชฐเซเชฏ เชจเซเชเชงเชชเชพเชคเซเชฐ เชญเซเชฎเชฟเชเชพ เชญเชเชตเซ. เชถเซเช เชชเซเชฐเชเซเชฐเชฟเชฏเชพเช เชตเชเซเชเซ เชธเซเชงเซเช เชฒเชเชตเซเช เช เชฎเชงเซเชฏเชตเชฐเซเชคเซ เชซเชพเชเชฒ เชชเชฐ เชฒเชเชตเชพ เชเชฐเชคเชพเช เชเชฐเซเชเชฐ เชฎเซเชเซ เชซเชพเชฏเชฆเซ เชเซ? เชคเซ เชคเซเชฏเชพเชฐเซ เช เชนเชคเซเช เชเซเชฏเชพเชฐเซ เชฎเซเช เชเชเชฐเซเชทเช เชจเชพเชฎ "เชชเชพเชเชชเชฒเชพเชเชจ" เช เชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเช เชตเชเซเชเซเชจเซ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ เชฎเชพเชเซ เชตเชพเชเซเชฏเชฐเชเชจเชพเชจเซเช เชตเชฐเซเชฃเชจ เชธเชพเชฅเซ เชเซเชเซเชเชธ เชฆเชฐเชเชพเชธเซเชค เชเชฐเซ เชคเซเชฏเชพเชฐเซ เช เชเซเชจเซ เช เชเชคเซ เชเชนเซเชฏเซเช: "เชนเซเช เชคเซ เชเชฐเซเชถ!"
เช เชจเซ เชเชฐเซเชฏเซเช. เชเช เชญเชฏเชเชเชฐ เชธเชพเชเชเซ, เชเซเชจเซ เชเชฐเซเชจเชฒ เช เชจเซ เชถเซเชฒ เชฌเชฆเชฒเซเชฏเชพ, เชคเซเช เชเชจเชชเซเช (เชเซ เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเชเชฅเซ เชเชตเซ เชถเชเซ เชเซ) เชเซเชตเซ เชฐเซเชคเซ เชธเซเชตเซเชเชพเชฐเซ เชเซ เชคเซ เชชเซเชฐเชฎเชพเชฃเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชเชฃเชพ เชชเซเชฐเชฎเชพเชฃเชญเซเชค เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชจเชเซเชเซ เชเชฐเซเชฏเชพ เช เชจเซ เชซเชพเชเชฒเชจเชพ เชจเชพเชฎ เชชเชฃ เชฌเชฆเชฒเซเชฏเชพ. เชฌเซเชเชพ เชฆเชฟเชตเชธเซ, เชเชชเซเชฒเชฟเชเซเชถเชจเชฎเชพเช เชชเชพเชเชชเชฒเชพเชเชจเซเชธเชจเซ เชเซเชฌ เชตเซเชฏเชพเชชเช เชเชชเชฏเซเช เชฅเชตเชพ เชฒเชพเชเซเชฏเซ. เช เช เชตเชพเชกเชฟเชฏเชพเชจเชพ เช เชเชค เชธเซเชงเซเชฎเชพเช, เชธเชเชฟเชตเซ เชตเชฐเซเชก เชชเซเชฐเซเชธเซเชธเชฐเชฎเชพเชเชฅเซ เชชเซเชฐเชฟเชจเซเชเชฐ เชชเชฐ เชฆเชธเซเชคเชพเชตเซเชเซ เชฎเซเชเชฒเชตเชพ เชฎเชพเชเซ เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเชคเชพ เชนเชคเชพ. เชฅเซเชกเชพ เชธเชฎเชฏ เชชเชเซ, เชเซเชจเซ เชเซเชฒเซเชจเชฐ เชเชจเซเชตเซเชจเซเชถเชจเซเชธ เชธเชพเชฅเซ เชชเชพเชเชชเชฒเชพเชเชจเชจเชพ เชเชชเชฏเซเชเชจเซ เชฒเชชเซเชเชตเชพ เชฎเชพเชเซ เชฎเซเชณ API เช เชจเซ เชตเชพเชเซเชฏเชฐเชเชจเชพเชจเซเช เชธเซเชฅเชพเชจ เชฒเซเชงเซเช, เชเซ เชคเซเชฏเชพเชฐเชฅเซ เชเชชเชฏเซเชเชฎเชพเช เชฒเซเชตเชพเชฏ เชเซ.
เชเชฎเชจเชธเซเชฌเซ, เชคเซเชฐเซเชเซ เชเชตเซเชคเซเชคเชฟ เชฏเซเชจเชฟเชเซเชธ เชเชฐเซเชจเชฒ เชฎเชพเชเซเชจเซ เชธเซเชฐเซเชค เชเซเชก เชเซเชตเชพเช เชเชฏเซ เชเซ. เช
เชจเซ เชเซ เชเซ เชเชชเชฃเซ เชชเชพเชธเซ เชเชฐเซเชจเชฒ เชธเซเชฐเซเชธ เชเซเชก C เชฎเชพเช เชฒเชเชพเชฏเซเชฒเซ เชเซ
เช
เชฎเชพเชฐเซ เชชเชพเชธเซ เชเซเชเซเชธเซเช เชฆเชธเซเชคเชพเชตเซเชเซเชเชฐเชฃ เชเซ pipe(2)
เชฌเชเชจเซ เชชเซเชฐเชเชพเชถเชจเซเชฎเชพเชเชฅเซ, เชเซเชฅเซ เชคเชฎเซ เชฆเชธเซเชคเชพเชตเซเชเซเชเชฐเชฃ เชถเซเชงเซเชจเซ เชชเซเชฐเชพเชฐเชเชญ เชเชฐเซ เชถเชเซ pipe(2)
เชเชธเซเชฎเซเชฌเชฒเซ เชญเชพเชทเชพเชฎเชพเช เชฒเชเชพเชฏเซเชฒ เชเซ เช
เชจเซ เชฎเชพเชคเซเชฐ เชเช เชซเชพเชเชฒ เชตเชฐเซเชฃเชจเชเชฐเซเชคเชพ เชชเชฐเชค เชเชฐเซ เชเซ, เชชเชฐเชเชคเซ เชชเชนเซเชฒเซเชฅเซ เช เช
เชชเซเชเซเชทเชฟเชค เชฎเซเชเซเชฏ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ:
เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชชเชพเชเชช เชชเชพเชเชชเชฒเชพเชเชจ เชคเชฐเซเชเซ เชเชณเชเชพเชคเซ เชเชจเชชเซเช/เชเชเชเชชเซเช เชฎเชฟเชเซเชจเชฟเชเชฎ เชฌเชจเชพเชตเซ เชเซ. เชฐเซเชเชฐเซเชจ เชฅเชฏเซเชฒ เชซเชพเชเชฒ เชกเชฟเชธเซเชเซเชฐเซเชชเซเชเชฐเชจเซ เชเชชเชฏเซเช เชตเชพเชเชเชตเชพ เช เชจเซ เชฒเชเชตเชพเชจเซ เชเชพเชฎเชเซเชฐเซ เชฎเชพเชเซ เชเชฐเซ เชถเชเชพเชฏ เชเซ. เชเซเชฏเชพเชฐเซ เชชเชพเชเชชเชฒเชพเชเชจ เชชเชฐ เชเชเชเช เชฒเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฏเชพเชฐเซ 504 เชฌเชพเชเชเซเชธ เชธเซเชงเซเชจเซ เชกเซเชเชพ เชฌเชซเชฐ เชฅเชพเชฏ เชเซ, เชคเซเชฏเชพเชฐเชฌเชพเชฆ เชฒเซเชเชจ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชธเชธเซเชชเซเชจเซเชก เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเชเชฅเซ เชตเชพเชเชเชคเซ เชตเชเชคเซ, เชฌเชซเชฐ เชฅเชฏเซเชฒ เชกเซเชเชพ เชฆเซเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชชเชเซเชจเชพ เชตเชฐเซเชท เชธเซเชงเซเชฎเชพเช เชเชฐเซเชจเชฒเชจเซ C เชฎเชพเช เชซเชฐเซเชฅเซ เชฒเชเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช, เช
เชจเซ pipe(fildes)
"
เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชชเชพเชเชช เชชเชพเชเชชเชฒเชพเชเชจ เชคเชฐเซเชเซ เชเชณเชเชพเชคเซ เชเชจเชชเซเช/เชเชเชเชชเซเช เชฎเชฟเชเซเชจเชฟเชเชฎ เชฌเชจเชพเชตเซ เชเซ. เชฐเซเชเชฐเซเชจ เชเชฐเซเชฒ เชซเชพเชเชฒ เชกเชฟเชธเซเชเซเชฐเซเชชเซเชเชฐเซเชธเชจเซ เชเชชเชฏเซเช เชตเชพเชเชเชตเชพ เช เชจเซ เชฒเชเชตเชพเชจเซ เชเชพเชฎเชเซเชฐเซเชฎเชพเช เชเชฐเซ เชถเชเชพเชฏ เชเซ. เชเซเชฏเชพเชฐเซ เชชเชพเชเชชเชฒเชพเชเชจ เชชเชฐ เชเชเชเช เชฒเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฏเชพเชฐเซ r1 (resp. fildes[1]) เชฎเชพเช เชชเชฐเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฒ เชนเซเชจเซเชกเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชกเซเชเชพเชจเชพ 4096 เชฌเชพเชเชเซเชธ เชชเชฐ เชฌเชซเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเซเชฏเชพเชฐเชฌเชพเชฆ เชฒเชเชตเชพเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชธเชธเซเชชเซเชจเซเชก เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเชเชฅเซ เชตเชพเชเชเชคเซ เชตเชเชคเซ, เชนเซเชจเซเชกเชฒ r0 เชชเชฐ เชชเชพเชเซเช เชเชตเซ เชเซ (resp. fildes[0]) เชกเซเชเชพ เชฒเซ เชเซ.
เชเชตเซเช เชฎเชพเชจเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชเซ เชเชเชตเชพเชฐ เชชเชพเชเชชเชฒเชพเชเชจ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชฌเซ (เช เชฅเชตเชพ เชตเชงเซ) เชธเชเชเชพเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเช (เช เชจเซเชเชพเชฎเซ เชเซเชฒเซเชธ เชฆเซเชตเชพเชฐเชพ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชเชพเชเชเซ) เชเซเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเชเชฅเซ เชกเซเชเชพ เชเซเชฐเชพเชจเซเชธเชซเชฐ เชเชฐเชถเซ เชตเชพเชเชเชตเซเช ะธ เชฒเชเซ.
เชถเซเชฒเชฎเชพเช เชชเชพเชเชชเชฒเชพเชเชจ เชฆเซเชตเชพเชฐเชพ เชเซเชกเชพเชฏเซเชฒ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชเชจเซ เชฐเซเชเซเชฏ เชถเซเชฐเซเชฃเซเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ เชเช เชตเชพเชเซเชฏเชฐเชเชจเชพ เชเซ.
เชเชพเชฒเซ เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเชเชฅเซ เชตเชพเชเชเชตเชพ เชฎเชพเชเซเชจเชพ เชเซเชฒเซเชธ (เชเซเชฎเชพเช เชเซเช เชฌเชซเชฐ เชกเซเชเชพ เชจเชฅเซ) เชเซเชจเซ เชฎเชพเชคเซเชฐ เชเช เชเซเชกเซ เชเซ (เชคเชฎเชพเชฎ เชฒเซเชเชจ เชซเชพเชเชฒ เชตเชฐเซเชฃเชจเชเชฐเซเชคเชพเช เชฌเชเชง เชเซ) "เชซเชพเชเชฒเชจเซ เช เชเชค" เชชเชฐเชค เชเชฐเซ เชเซ. เชธเชฎเชพเชจ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชฎเชพเช เชฒเชเชตเชพ เชฎเชพเชเซเชจเชพ เชเซเชฒเซเชธเชจเซ เช เชตเชเชฃเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชธเซเชฅเซ เชตเชนเซเชฒเซเช
เชฏเซเชจเชฟเชเซเชธเชจเซ เชเช เซเช เซ เชเชตเซเชคเซเชคเชฟ (1975)
เชเชพเชฒเซ เชฏเซเชจเชฟเชเซเชธ เชธเซเชฐเซเชธ เชเซเชก เชตเชพเชเชเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซเช
เชเชฃเชพ เชตเชฐเซเชทเซเชฅเซ เชชเซเชธเซเชคเช เชฒเชพเชฏเชจเซเชธ เชฌเซเชฒ เชฒเซเชฌเซเชธเชจเซ เชฌเชนเชพเชฐ เชเชชเชฒเชฌเซเชง เชฏเซเชจเชฟเชเซเชธ เชเชฐเซเชจเชฒ เชชเชฐเชจเซ เชเชเชฎเชพเชคเซเชฐ เชฆเชธเซเชคเชพเชตเซเช เชนเชคเซ. เชเช เซเช เซ เชเชตเซเชคเซเชคเชฟเชจเชพ เชฒเชพเชฏเชธเชจเซเชธเซ เชถเชฟเชเซเชทเชเซเชจเซ เชคเซเชจเชพ เชธเซเชฐเซเชค เชเซเชกเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชนเซเชตเชพ เชเชคเชพเช, เชธเชพเชคเชฎเซ เชเชตเซเชคเซเชคเชฟเชจเชพ เชฒเชพเชฏเชธเชจเซเชธเซ เช เชถเชเซเชฏเชคเชพเชจเซ เชฌเชพเชเชพเชค เชฐเชพเชเซ เชนเชคเซ, เชคเซเชฅเซ เชชเซเชธเซเชคเช เชเซเชฐเชเชพเชฏเชฆเซเชธเชฐ เชเชพเชเชช เชฒเชเซเชฒเซ เชจเชเชฒเซเชจเชพ เชฐเซเชชเชฎเชพเช เชตเชฟเชคเชฐเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช.
เชเชเซ เชคเชฎเซ เชชเซเชธเซเชคเชเชจเซเช เชฐเชฟเชชเซเชฐเชฟเชจเซเช เชเชฐเซเชฆเซ เชถเชเซ เชเซ, เชเซเชจเซเช เชเชตเชฐ เชเซเชชเซ เชฎเชถเซเชจ เชชเชฐ เชตเชฟเชฆเซเชฏเชพเชฐเซเชฅเซเชเชจเซ เชฌเชคเชพเชตเซ เชเซ. เช
เชจเซ เชตเซเชฐเซเชจ เชเซเชฎเซ (เชเซเชฎเชฃเซ TUHS เชชเซเชฐเซเชเซเชเซเช เชถเชฐเซ เชเชฐเซเชฏเซ)เชจเซ เชเชญเชพเชฐ เชคเชฎเซ เชกเชพเชเชจเชฒเซเชก เชเชฐเซ เชถเชเซ เชเซ
15 เชเชฐเชคเชพเช เชตเชงเซ เชตเชฐเซเชท เชชเชนเซเชฒเชพเช, เชฎเซเช เชเชชเซเชฒ เชธเซเชฐเซเชค เชเซเชกเชจเซ เชเช เชจเชเชฒ เชเชพเชเชช เชเชฐเซ เชนเชคเซ เชฒเชพเชฏเชจเซเชธ, เชเชพเชฐเชฃ เชเซ เชฎเชจเซ เช เชเซเชเชพเชค เชธเชเชเซเชฏเชพเชฎเชพเช เช เชจเซเชฏ เชจเชเชฒเซเชฎเชพเชเชฅเซ เชฎเชพเชฐเซ เชจเชเชฒเชจเซ เชเซเชฃเชตเชคเซเชคเชพ เชเชฎเชคเซ เชจเชฅเซ. TUHS เชนเชเซ เชธเซเชงเซ เช เชธเซเชคเชฟเชคเซเชตเชฎเชพเช เชจเชฅเซ เช เชจเซ เชฎเชพเชฐเซ เชชเชพเชธเซ เชเซเชจเชพ เชธเซเชคเซเชฐเซเชคเซเชจเซ เชเชเซเชธเซเชธ เชจเชฅเซ. เชชเชฐเชเชคเซ 1988 เชฎเชพเช, เชฎเชจเซ เชเช เชเซเชจเซ 9-เชเซเชฐเซเช เชเซเชช เชฎเชณเซ เชเซเชฎเชพเช PDP11 เชเชฎเซเชชเซเชฏเซเชเชฐเชฎเชพเชเชฅเซ เชฌเซเชเช เชช เชนเชคเซเช. เชคเซ เชเชพเชฎ เชเชฐเชคเซเช เชนเชคเซเช เชเซ เชเซเชฎ เชคเซ เชเชนเซเชตเซเช เชฎเซเชถเซเชเซเชฒ เชนเชคเซเช, เชชเชฐเชเชคเซ เชเช เช เชเชฌเชเชง /usr/src/ เชตเซเชเซเชท เชนเชคเซเช เชเซเชฎเชพเช เชฎเซเชเชพเชญเชพเชเชจเซ เชซเชพเชเชฒเซ เชตเชฐเซเชท 1979 เชธเชพเชฅเซ เชฒเซเชฌเชฒเชตเชพเชณเซ เชนเชคเซ, เชเซ เชคเซ เชชเชเซ เชชเชฃ เชชเซเชฐเชพเชเซเชจ เชฒเชพเชเชคเซ เชนเชคเซ. เชคเซ เชธเชพเชคเชฎเซ เชเชตเซเชคเซเชคเชฟ เช เชฅเชตเชพ เชคเซเชจเซเช เชตเซเชฏเซเชคเซเชชเชจเซเชจ PWB เชนเชคเซเช, เชเซเชฎ เชเซ เชนเซเช เชฎเชพเชจเชคเซ เชนเชคเซ.
เชฎเซเช เชถเซเชงเชจเซ เชเชงเชพเชฐ เชคเชฐเซเชเซ เชฒเซเชงเซ เช เชจเซ เชเช เซเช เซ เชเชตเซเชคเซเชคเชฟเชฎเชพเช เชธเซเชคเซเชฐเซเชคเซเชจเซ เชฎเซเชจเซเชฏเซเช เชฒเซ เชธเชเชชเชพเชฆเชฟเชค เชเชฐเซเชฏเชพ. เชเซเชเชฒเชพเช เชเซเชก เชธเชฎเชพเชจ เชฐเชนเซเชฏเชพ, เชชเชฐเชเชคเซ เชเซเชเชฒเชพเชเชจเซ เชธเชนเซเช เชธเชเชชเชพเชฆเชฟเชค เชเชฐเชตเชพ เชชเชกเซเชฏเชพ, เชเชงเซเชจเชฟเช += เชเซเชเชจเชจเซ เชเซเชจเชพ =+ เชฎเชพเช เชฌเชฆเชฒเซเชจเซ. เชเซเชเชฒเซเช เชตเชธเซเชคเซเช เชเชพเชฒเซ เชเชพเชขเซ เชจเชพเชเชตเชพเชฎเชพเช เชเชตเซ เชนเชคเซ, เช เชจเซ เชเซเชเชฒเซเชเชจเซ เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เชซเชฐเซเชฅเซ เชฒเชเชตเชพเชจเซ เชนเชคเซ, เชชเชฐเชเชคเซ เชตเชงเซ เชชเชกเชคเซ เชจเชนเซเช.
เช
เชจเซ เชเชเซ เชเชชเชฃเซ TUHS เชชเชฐ เชเช เซเช เซ เชเชตเซเชคเซเชคเชฟเชจเซ เชธเซเชฐเซเชธ เชเซเชก เชเชจเชฒเชพเชเชจ เชตเชพเชเชเซ เชถเชเซเช เชเซเช
เชฎเชพเชฐเซเช เชฆเซเชตเชพเชฐเชพ, เชชเซเชฐเชฅเชฎ เชจเชเชฐเชฎเชพเช, เชเชฐเซเชจเชฟเชเชจ เช เชจเซ เชฐเชฟเชเซเชจเชพ เชธเชฎเชฏเชเชพเชณเชพ เชชเชนเซเชฒเชพ เชธเซ-เชเซเชกเชจเซ เชฎเซเชเซเชฏ เชตเชฟเชถเซเชทเชคเชพ เช เชเซ เชเซ เชคเซเชจเซ เชธเชเชเซเชทเชฟเชชเซเชคเชคเชพ. เชเชฃเซ เชตเชพเชฐ เชเชตเซเช เชจเชฅเซ เชนเซเชคเซเช เชเซ เชนเซเช เชฎเชพเชฐเซ เชธเชพเชเช เชชเชฐ เชชเซเชฐเชฎเชพเชฃเชฎเชพเช เชธเชพเชเชเชกเชพ เชกเชฟเชธเซเชชเซเชฒเซ เชเชฐเชฟเชฏเชพเชจเซ เชซเชฟเช เชเชฐเชตเชพ เชฎเชพเชเซ เชตเซเชฏเชพเชชเช เชธเชเชชเชพเชฆเชจ เชตเชฟเชจเชพ เชเซเชกเชจเชพ เชเซเชเชกเชพ เชฆเชพเชเชฒ เชเชฐเซ เชถเชเซเช เชเซเช.
เชถเชฐเซเชเชคเชพเชฎเชพ
/*
* Max allowable buffering per pipe.
* This is also the max size of the
* file created to implement the pipe.
* If this size is bigger than 4096,
* pipes will be implemented in LARG
* files, which is probably not good.
*/
#define PIPSIZ 4096
เชเซเชฅเซ เชเชตเซเชคเซเชคเชฟเชฅเซ เชฌเชซเชฐเชจเซเช เชเชฆ เชฌเชฆเชฒเชพเชฏเซเช เชจเชฅเซ. เชชเชฐเชเชคเซ เช เชนเซเช เชเชชเชฃเซ เชเซเชเช เชเซเช, เชเซเชเชชเชฃ เชธเชพเชฐเซเชตเชเชจเชฟเช เชฆเชธเซเชคเชพเชตเซเชเซ เชตเชฟเชจเชพ, เชคเซ เชชเชพเชเชชเชฒเชพเชเชจเซเชธ เชเชเชตเชพเชฐ เชฌเซเชเช เชช เชธเซเชเซเชฐเซเช เชคเชฐเซเชเซ เชซเชพเชเชฒเซเชจเซ เชเชชเชฏเซเช เชเชฐเชคเซ เชนเชคเซ!
LARG เชซเชพเชเชฒเซ เชฎเชพเชเซ, เชคเซเช เช
เชจเซเชฐเซเชช เชเซ
เช
เชนเซเช เชตเชพเชธเซเชคเชตเชฟเช เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชเซ pipe
:
/*
* The sys-pipe entry.
* Allocate an inode on the root device.
* Allocate 2 file structures.
* Put it all together with flags.
*/
pipe()
{
register *ip, *rf, *wf;
int r;
ip = ialloc(rootdev);
if(ip == NULL)
return;
rf = falloc();
if(rf == NULL) {
iput(ip);
return;
}
r = u.u_ar0[R0];
wf = falloc();
if(wf == NULL) {
rf->f_count = 0;
u.u_ofile[r] = NULL;
iput(ip);
return;
}
u.u_ar0[R1] = u.u_ar0[R0]; /* wf's fd */
u.u_ar0[R0] = r; /* rf's fd */
wf->f_flag = FWRITE|FPIPE;
wf->f_inode = ip;
rf->f_flag = FREAD|FPIPE;
rf->f_inode = ip;
ip->i_count = 2;
ip->i_flag = IACC|IUPD;
ip->i_mode = IALLOC;
}
เชเชฟเชชเซเชชเชฃเซ เชธเซเชชเชทเซเชเชชเชฃเซ เชตเชฐเซเชฃเชตเซ เชเซ เชเซ เช
เชนเซเช เชถเซเช เชฅเช เชฐเชนเซเชฏเซเช เชเซ. เชชเชฐเชเชคเซ เชเซเชกเชจเซ เชธเชฎเชเชตเซเช เชเชเชฒเซเช เชธเชฐเชณ เชจเชฅเซ, เชเชเชถเชฟเช เชฐเซเชคเซ เชฎเชพเชฐเซเชเชจเซ เชเชพเชฐเชฃเซ "R0
ะธ R1
เชธเชฟเชธเซเชเชฎ เชเซเชฒ เชชเชฐเชฟเชฎเชพเชฃเซ เช
เชจเซ เชตเชณเชคเชฐ เชฎเซเชฒเซเชฏเซ เชชเชธเชพเชฐ เชฅเชพเชฏ เชเซ.
เชเชพเชฒเซ เชธเชพเชฅเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเช
pipe()
เชฎเชพเชฐเชซเชคเซ เช เชเซเชเช R0
ะธ R1
เชตเชพเชเชเชตเชพ เช
เชจเซ เชฒเชเชตเชพ เชฎเชพเชเซ เชซเชพเชเชฒ เชตเชฐเซเชฃเชจเชเชฐเซเชคเชพ เชจเชเชฌเชฐเซ เชชเชฐเชค เชเชฐเซ. falloc()
เชซเชพเชเชฒ เชธเซเชเซเชฐเชเซเชเชฐเชฎเชพเช เชชเซเชเชจเซเชเชฐ เชชเชฐเชค เชเชฐเซ เชเซ, เชชเชฃ เชฎเชพเชฐเชซเชคเซ "เชฐเซเชเชฐเซเชจ" เชชเชฃ เชเชฐเซ เชเซ u.u_ar0[R0]
เช
เชจเซ เชซเชพเชเชฒ เชตเชฐเซเชฃเชจเชเชฐเซเชคเชพ. เชเชเชฒเซ เชเซ, เชเซเชก เชธเชพเชเชตเซ เชเซ r
เชตเชพเชเชเชตเชพ เชฎเชพเชเซ เชซเชพเชเชฒ เชตเชฐเซเชฃเชจเชเชฐเซเชคเชพ เช
เชจเซ เชธเซเชงเชพ เช เชฒเชเชตเชพ เชฎเชพเชเซ เชซเชพเชเชฒ เชตเชฐเซเชฃเชจเชเชฐเซเชคเชพ เชธเซเชเชชเซ เชเซ u.u_ar0[R0]
เชฌเซเชเชพ เชเซเชฒ เชชเชเซ falloc()
.
เชงเซเชตเช FPIPE
, เชเซ เชเชชเชฃเซ เชชเชพเชเชชเชฒเชพเชเชจ เชฌเชจเชพเชตเชคเซ เชตเชเชคเซ เชธเซเช เชเชฐเซเช เชเซเช, เชคเซ เชเชพเชฐเซเชฏเชจเชพ เชตเชฐเซเชคเชจเชจเซ เชจเชฟเชฏเชเชคเซเชฐเชฟเชค เชเชฐเซ เชเซ
/*
* common code for read and write calls:
* check permissions, set base, count, and offset,
* and switch out to readi, writei, or pipe code.
*/
rdwr(mode)
{
register *fp, m;
m = mode;
fp = getf(u.u_ar0[R0]);
/* โฆ */
if(fp->f_flag&FPIPE) {
if(m==FREAD)
readp(fp); else
writep(fp);
}
/* โฆ */
}
เชชเชเซ เชเชพเชฐเซเชฏ readp()
ะฒ pipe.c
เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเชเชฅเซ เชกเซเชเชพ เชตเชพเชเชเซ เชเซ. เชชเชฐเชเชคเซ เช
เชฎเชฒเซเชเชฐเชฃเชฅเซ เชถเชฐเซ เชเชฐเซเชจเซ เชเซเชฐเซเชธ เชเชฐเชตเซเช เชตเชงเซ เชธเชพเชฐเซเช เชเซ writep()
. เชซเชฐเซเชฅเซ, เชฆเชฒเซเชฒเซ เชชเชธเชพเชฐ เชเชฐเชตเชพเชจเชพ เชธเชเชฎเซเชฒเชจเซเชจเซ เชเชพเชฐเชฃเซ เชเซเชก เชตเชงเซ เชเชเชฟเชฒ เชฌเชจเซ เชเชฏเซ เชเซ, เชชเชฐเชเชคเซ เชเซเชเชฒเซเช เชตเชฟเชเชคเซ เช
เชตเชเชฃเซ เชถเชเชพเชฏ เชเซ.
writep(fp)
{
register *rp, *ip, c;
rp = fp;
ip = rp->f_inode;
c = u.u_count;
loop:
/* If all done, return. */
plock(ip);
if(c == 0) {
prele(ip);
u.u_count = 0;
return;
}
/*
* If there are not both read and write sides of the
* pipe active, return error and signal too.
*/
if(ip->i_count < 2) {
prele(ip);
u.u_error = EPIPE;
psignal(u.u_procp, SIGPIPE);
return;
}
/*
* If the pipe is full, wait for reads to deplete
* and truncate it.
*/
if(ip->i_size1 == PIPSIZ) {
ip->i_mode =| IWRITE;
prele(ip);
sleep(ip+1, PPIPE);
goto loop;
}
/* Write what is possible and loop back. */
u.u_offset[0] = 0;
u.u_offset[1] = ip->i_size1;
u.u_count = min(c, PIPSIZ-u.u_offset[1]);
c =- u.u_count;
writei(ip);
prele(ip);
if(ip->i_mode&IREAD) {
ip->i_mode =& ~IREAD;
wakeup(ip+2);
}
goto loop;
}
เช
เชฎเซ เชชเชพเชเชชเชฒเชพเชเชจ เชเชจเชชเซเช เชชเชฐ เชฌเชพเชเชเซเชธ เชฒเชเชตเชพ เชฎเชพเชเชเซเช เชเซเช u.u_count
. เชชเซเชฐเชฅเชฎ เชเชชเชฃเซ inode เชฒเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ (เชจเซเชเซ เชเซเช plock
/prele
).
เชชเชเซ เช
เชฎเซ inode เชธเชเชฆเชฐเซเชญ เชเชพเชเชจเซเชเชฐ เชคเชชเชพเชธเซเช เชเซเช. เชเซเชฏเชพเช เชธเซเชงเซ เชชเชพเชเชชเชฒเชพเชเชจเชจเชพ เชฌเชเชจเซ เชเซเชกเชพ เชเซเชฒเซเชฒเชพ เชฐเชนเซ เชคเซเชฏเชพเช เชธเซเชงเซ เชเชพเชเชจเซเชเชฐ 2 เชเซเชเชฒเซเช เชนเซเชตเซเช เชเซเชเช. เช
เชฎเซ เชเช เชฒเชฟเชเช เชชเชเชกเซ เชฐเชพเชเซเช เชเซเช (เชฎเชพเชเชฅเซ rp->f_inode
), เชคเซเชฅเซ เชเซ เชเชพเชเชจเซเชเชฐ 2 เชเชฐเชคเชพ เชเชเซเช เชนเซเชฏ, เชคเซ เชคเซเชจเซ เช
เชฐเซเชฅ เช เชนเซเชตเซ เชเซเชเช เชเซ เชตเชพเชเชเชจ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเช เชคเซเชจเซ เชชเชพเชเชชเชฒเชพเชเชจเชจเซ เช
เชเชค เชฌเชเชง เชเชฐเซ เชฆเซเชงเซ เชเซ. เชฌเซเชเชพ เชถเชฌเซเชฆเซเชฎเชพเช เชเชนเซเช เชคเซ, เช
เชฎเซ เชฌเชเชง เชชเชพเชเชชเชฒเชพเชเชจ เชชเชฐ เชฒเชเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช, เช
เชจเซ เช เชเช เชญเซเชฒ เชเซ. เชชเซเชฐเชฅเชฎ เชตเชเชค เชญเซเชฒ เชเซเชก EPIPE
เช
เชจเซ เชธเชเชเซเชค SIGPIPE
เชฏเซเชจเชฟเชเซเชธเชจเซ เชเช เซเช เซ เชเชตเซเชคเซเชคเชฟเชฎเชพเช เชฆเซเชเชพเชฏเชพ.
เชชเชฐเชเชคเซ เชเชจเซเชตเซเชฏเชฐ เชเซเชฒเซเชฒเซเช เชนเซเชตเชพ เชเชคเชพเช, เชคเซ เชญเชฐเซเชฒเซเช เชนเซเช เชถเชเซ เชเซ. เช เชเชฟเชธเซเชธเชพเชฎเชพเช, เช เชฎเซ เชคเชพเชณเชพเชจเซ เชฎเซเชเซเชค เชเชฐเซเช เชเซเช เช เชจเซ เชเชถเชพ เชธเชพเชฅเซ เชธเซเช เชเชเช เชเซเช เชเซ เชฌเซเชเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเชเชฅเซ เชตเชพเชเชเชถเซ เช เชจเซ เชคเซเชฎเชพเช เชชเซเชฐเชคเซ เชเชเซเชฏเชพ เชเชพเชฒเซ เชเชฐเชถเซ. เชเชพเชเซเชฏเชพ เชชเชเซ, เช เชฎเซ เชถเชฐเซเชเชคเชฎเชพเช เชชเชพเชเชพ เชเชตเซเช เชเซเช, เชซเชฐเซเชฅเซ เชฒเซเช เชฒเชเชเชพเชตเซเช เชเซเช เช เชจเซ เชเช เชจเชตเซเช เชฐเซเชเซเชฐเซเชกเชฟเชเช เชเชเซเชฐ เชถเชฐเซ เชเชฐเซเช เชเซเช.
เชเซ เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเช เชชเซเชฐเชคเซ เชเชพเชฒเซ เชเชเซเชฏเชพ เชนเซเชฏ, เชคเซ เช
เชฎเซ เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชกเซเชเชพ เชฒเชเซเช เชเซเช i_size1
inode (เชเซ เชชเชพเชเชชเชฒเชพเชเชจ เชเชพเชฒเซ เชนเซเชฏ, เชคเซ เชคเซ 0 เชจเซ เชฌเชฐเชพเชฌเชฐ เชนเซเช เชถเชเซ เชเซ) เชคเซ เชชเชนเซเชฒเชพเชฅเซ เช เชธเชฎเชพเชตเชฟเชทเซเช เชกเซเชเชพเชจเซ เช
เชเชค เชธเซเชเชตเซ เชเซ. เชเซ เชคเซเชฏเชพเช เชชเชฐเซเชฏเชพเชชเซเชค เชฐเซเชเซเชฐเซเชกเชฟเชเช เชเชเซเชฏเชพ เชนเซเชฏ, เชคเซ เช
เชฎเซ เช
เชนเซเชเชฅเซ เชชเชพเชเชชเชฒเชพเชเชจ เชญเชฐเซ เชถเชเซเช เชเซเช i_size1
เชฎเชพเชเซ PIPESIZ
. เชชเชเซ เช
เชฎเซ เชฒเซเชเชจเซ เชฎเซเชเซเชค เชเชฐเซเช เชเซเช เช
เชจเซ เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเชเชฅเซ เชตเชพเชเชเชตเชพเชจเซ เชฐเชพเชน เชเซเช เชฐเชนเซเชฒเซ เชเซเชเชชเชฃ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชเชพเชเซเชค เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเช เชเซเช. เชเชชเชฃเซ เชถเชฐเซเชเชค เชชเชฐ เชชเชพเชเชพ เชเชเช เชเซเช เชเซ เชถเซเช เชเชชเชฃเซ เชเซเชเช เชคเซเชเชฒเชพ เชฌเชพเชเชเซเชธ เชฒเชเซ เชถเชเซเชฏเชพ เชเซเช. เชเซ เชคเซ เชจเชฟเชทเซเชซเชณ เชเชพเชฏ, เชคเซ เช
เชฎเซ เชเช เชจเชตเซเช เชฐเซเชเซเชฐเซเชกเชฟเชเช เชเชเซเชฐ เชถเชฐเซ เชเชฐเซเช เชเซเช.
เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชชเชฐเชฟเชฎเชพเชฃ i_mode
inode เชจเซ เชเชชเชฏเซเช เชชเชฐเชตเชพเชจเชเซเช เชธเซเชเซเชฐ เชเชฐเชตเชพ เชฎเชพเชเซ เชฅเชพเชฏ เชเซ r
, w
ะธ x
. เชชเชฐเชเชคเซ เชชเชพเชเชชเชฒเชพเชเชจเซเชธเชจเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช, เช
เชฎเซ เชธเชเชเซเชค เชเชชเซเช เชเซเช เชเซ เช
เชฎเซเช เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชฌเชฟเชเซเชธเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชฒเชเชตเชพ เช
เชฅเชตเชพ เชตเชพเชเชเชตเชพเชจเซ เชฐเชพเชน เชเซเช เชฐเชนเซ เชเซ IREAD
ะธ IWRITE
เช
เชจเซเชเซเชฐเชฎเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชงเซเชตเช เช
เชจเซ เชเซเชฒเซเชธ เชธเซเช เชเชฐเซ เชเซ sleep()
, เช
เชจเซ เชคเซ เช
เชชเซเชเซเชทเชฟเชค เชเซ เชเซ เชญเชตเชฟเชทเซเชฏเชฎเชพเช เชเซเชเชฒเซเช เช
เชจเซเชฏ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชเชจเซเช เชเชพเชฐเชฃ เชฌเชจเชถเซ wakeup()
.
เชตเชพเชธเซเชคเชตเชฟเช เชเชพเชฆเซ เชฎเชพเช เชฅเชพเชฏ เชเซ sleep()
ะธ wakeup()
. เชคเซเช เชฎเชพเช เช
เชฎเชฒเชฎเชพเช เชเซ
/*
* Give up the processor till a wakeup occurs
* on chan, at which time the process
* enters the scheduling queue at priority pri.
* The most important effect of pri is that when
* pri<0 a signal cannot disturb the sleep;
* if pri>=0 signals will be processed.
* Callers of this routine must be prepared for
* premature return, and check that the reason for
* sleeping has gone away.
*/
sleep(chan, pri) /* โฆ */
/*
* Wake up all processes sleeping on chan.
*/
wakeup(chan) /* โฆ */
เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเซเชจเซเช เชเชพเชฐเชฃ เชฌเชจเซ เชเซ sleep()
เชเซเชเซเชเชธ เชเซเชจเชฒ เชฎเชพเชเซ, เชชเชพเชเชณเชฅเซ เชฌเซเชเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชฆเซเชตเชพเชฐเชพ เชเชพเชเซเชค เชฅเช เชถเชเซ เชเซ, เชเซเชจเซเช เชเชพเชฐเชฃ เชฌเชจเชถเซ wakeup()
เชธเชฎเชพเชจ เชเซเชจเชฒ เชฎเชพเชเซ. writep()
ะธ readp()
เชเชตเชพ เชเซเชกเซเชตเชพเชณเชพ เชเซเชฒ เชฆเซเชตเชพเชฐเชพ เชคเซเชฎเชจเซ เชเซเชฐเชฟเชฏเชพเชเชจเซเช เชธเชเชเชฒเชจ เชเชฐเซ. เชคเซเชจเซ เชจเซเชเชง เชเชฐเซ pipe.c
เชนเชเชฎเซเชถเชพ เชชเซเชฐเชพเชฅเชฎเชฟเชเชคเชพ เชเชชเซ เชเซ PPIPE
เชเซเชฏเชพเชฐเซ เชฌเซเชฒเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ sleep()
, เชคเซเชฅเซ เชคเซ เชเซ sleep()
เชธเชฟเชเซเชจเชฒ เชฆเซเชตเชพเชฐเชพ เชตเชฟเชเซเชทเซเชชเชฟเชค เชฅเช เชถเชเซ เชเซ.
เชนเชตเซ เชเชชเชฃเซ เชชเชพเชธเซ เชซเชเชเซเชถเชจเชจเซ เชธเชฎเชเชตเชพ เชฎเชพเชเซ เชฌเชงเซเช เชเซ readp()
:
readp(fp)
int *fp;
{
register *rp, *ip;
rp = fp;
ip = rp->f_inode;
loop:
/* Very conservative locking. */
plock(ip);
/*
* If the head (read) has caught up with
* the tail (write), reset both to 0.
*/
if(rp->f_offset[1] == ip->i_size1) {
if(rp->f_offset[1] != 0) {
rp->f_offset[1] = 0;
ip->i_size1 = 0;
if(ip->i_mode&IWRITE) {
ip->i_mode =& ~IWRITE;
wakeup(ip+1);
}
}
/*
* If there are not both reader and
* writer active, return without
* satisfying read.
*/
prele(ip);
if(ip->i_count < 2)
return;
ip->i_mode =| IREAD;
sleep(ip+2, PPIPE);
goto loop;
}
/* Read and return */
u.u_offset[0] = 0;
u.u_offset[1] = rp->f_offset[1];
readi(ip);
rp->f_offset[1] = u.u_offset[1];
prele(ip);
}
เชคเชฎเชจเซ เช เชซเชเชเซเชถเชจเชจเซ เชจเซเชเซเชฅเซ เชเชชเชฐ เชธเซเชงเซ เชตเชพเชเชเชตเซเช เชตเชงเซ เชธเชฐเชณ เชฒเชพเชเชถเซ. "เชฐเซเชก เชเชจเซเชก เชฐเซเชเชฐเซเชจ" เชถเชพเชเชพเชจเซ เชเชชเชฏเซเช เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เชเซเชฏเชพเชฐเซ เชชเชพเชเชชเชฒเชพเชเชจเชฎเชพเช เช
เชฎเซเช เชกเซเชเชพ เชนเซเชฏ เชคเซเชฏเชพเชฐเซ เชฅเชพเชฏ เชเซ. เช เชเชฟเชธเซเชธเชพเชฎเชพเช, เช
เชฎเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช f_offset
เชตเชพเชเชเชจ, เช
เชจเซ เชชเชเซ เช
เชจเซเชฐเซเชช เชเชซเชธเซเชเชจเซ เชเชฟเชเชฎเชค เช
เชชเชกเซเช เชเชฐเซ.
เช
เชจเซเชเชพเชฎเซ เชฐเซเชก เชชเชฐ, เชเซ เชฐเซเชก เชเชซเชธเซเช เชชเชนเซเชเชเซ เชเชฏเซเช เชนเซเชฏ เชคเซ เชชเชพเชเชชเชฒเชพเชเชจ เชเชพเชฒเซ เชนเชถเซ i_size1
inode เชเชพเชคเซ. เช
เชฎเซ เชธเซเชฅเชฟเชคเชฟเชจเซ 0 เชชเชฐ เชฐเซเชธเซเช เชเชฐเซเช เชเซเช เช
เชจเซ เชชเชพเชเชชเชฒเชพเชเชจ เชชเชฐ เชฒเชเชตเชพ เชฎเชพเชเชเชคเซ เชเซเชเชชเชฃ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชเชพเชเซเชค เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซเช เชเซเช. เชเชชเชฃเซ เชเชพเชฃเซเช เชเซเช เชเซ เชเซเชฏเชพเชฐเซ เชเชจเซเชตเซเชฏเชฐ เชญเชฐเชพเช เชเชพเชฏ เชเซ, writep()
เชชเชฐ เชธเซเช เชเชถเซ ip+1
. เช
เชจเซ เชนเชตเซ เชเซเชฏเชพเชฐเซ เชชเชพเชเชชเชฒเชพเชเชจ เชเชพเชฒเซ เชเซ, เชคเซ เช
เชฎเซ เชคเซเชจเซเช เชฒเชเชตเชพเชจเซเช เชเชเซเชฐ เชซเชฐเซ เชถเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ เชคเซเชจเซ เชเชพเชเซเชค เชเชฐเซ เชถเชเซเช เชเซเช.
เชเซ เชคเชฎเชพเชฐเซ เชชเชพเชธเซ เชตเชพเชเชเชตเชพ เชฎเชพเชเซ เชเชเช เชจเชฅเซ, เชคเซ เชชเชเซ readp()
เชงเซเชตเช เชธเซเช เชเชฐเซ เชถเชเซ เชเซ IREAD
เช
เชจเซ เชธเซเช เชเชพเช ip+2
. เช
เชฎเซ เชเชพเชฃเซเช เชเซเช เชเซ เชคเซเชจเซ เชถเซเช เชเชพเชเซเชค เชเชฐเชถเซ writep()
, เชเซเชฏเชพเชฐเซ เชคเซ เชชเชพเชเชชเชฒเชพเชเชจ เชชเชฐ เช
เชฎเซเช เชกเซเชเชพ เชฒเชเซ เชเซ.
เชชเชฐ เชเชฟเชชเซเชชเชฃเซเช u
"เช
เชฎเซ เชคเซเชฎเชจเซ เชธเชพเชฎเชพเชจเซเชฏ I/O เชซเชเชเซเชถเชจเซเชธเชจเซ เชเซเชฎ เชเชฃเซ เชถเชเซเช เชเซเช เชเซ เชซเชพเชเชฒ, เชชเซเชเชฟเชถเชจ, เชฎเซเชฎเชฐเซเชฎเชพเช เชฌเชซเชฐ เชฒเซ เชเซ, เช
เชจเซ เชตเชพเชเชเชตเชพ เช
เชฅเชตเชพ เชฒเชเชตเชพ เชฎเชพเชเซ เชฌเชพเชเชเซเชธเชจเซ เชธเชเชเซเชฏเชพ เชเชฃเซ เชเซ.
/*
* Read the file corresponding to
* the inode pointed at by the argument.
* The actual read arguments are found
* in the variables:
* u_base core address for destination
* u_offset byte offset in file
* u_count number of bytes to read
* u_segflg read to kernel/user
*/
readi(aip)
struct inode *aip;
/* โฆ */
/*
* Write the file corresponding to
* the inode pointed at by the argument.
* The actual write arguments are found
* in the variables:
* u_base core address for source
* u_offset byte offset in file
* u_count number of bytes to write
* u_segflg write to kernel/user
*/
writei(aip)
struct inode *aip;
/* โฆ */
"เชฐเซเชขเชฟเชเซเชธเซเชค" เช
เชตเชฐเซเชงเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ, เชชเชเซ readp()
ะธ writep()
เชเซเชฏเชพเช เชธเซเชงเซ เชคเซเช เชคเซเชฎเชจเซเช เชเชพเชฐเซเชฏ เชชเซเชฐเซเชฃ เชเชฐเซ เช
เชฅเชตเชพ เชชเชฐเชฟเชฃเชพเชฎ เชชเซเชฐเชพเชชเซเชค เชจ เชเชฐเซ เชคเซเชฏเชพเช เชธเซเชงเซ เชเชเชจเซเชกเชจเซ เช
เชตเชฐเซเชงเชฟเชค เชเชฐเซ (เชเชเชฒเซ โโโโเชเซ, เชเซเชฒ เชเชฐเซ wakeup
). plock()
ะธ prele()
เชธเชฐเชณ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ: เชเซเชฒเซเชธเชจเชพ เช
เชฒเช เชธเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ sleep
ะธ wakeup
เช
เชฎเชจเซ เชเซเชเชชเชฃ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชเชพเชเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ เชเซเชจเซ เช
เชฎเซ เชนเชฎเชฃเชพเช เช เชฐเชฟเชฒเซเช เชเชฐเซเชฒ เชฒเซเชเชจเซ เชเชฐเซเชฐ เชเซ:
/*
* Lock a pipe.
* If its already locked, set the WANT bit and sleep.
*/
plock(ip)
int *ip;
{
register *rp;
rp = ip;
while(rp->i_flag&ILOCK) {
rp->i_flag =| IWANT;
sleep(rp, PPIPE);
}
rp->i_flag =| ILOCK;
}
/*
* Unlock a pipe.
* If WANT bit is on, wakeup.
* This routine is also used to unlock inodes in general.
*/
prele(ip)
int *ip;
{
register *rp;
rp = ip;
rp->i_flag =& ~ILOCK;
if(rp->i_flag&IWANT) {
rp->i_flag =& ~IWANT;
wakeup(rp);
}
}
เชถเชฐเซเชเชคเชฎเชพเช เชนเซเช เชเซเชฎ เชธเชฎเชเซ เชถเชเซเชฏเซ เชจเชนเซเช readp()
เชเชพเชฐเชฃ เชจเชฅเซ prele(ip)
เชเซเชฒ เชชเชนเซเชฒเชพเช wakeup(ip+1)
. เชชเซเชฐเชฅเชฎ เชตเชธเซเชคเซ เชเซ writep()
เชคเซเชจเชพ เชเชเซเชฐเชฎเชพเช เชเชพเชฐเชฃเซ, เช plock(ip)
, เชเซ เชกเซเชกเชฒเซเช เชคเชฐเชซ เชฆเซเชฐเซ เชเชพเชฏ เชเซ เชเซ readp()
เชนเชเซ เชธเซเชงเซ เชฎเชพเชฐเชพ เชฌเซเชฒเซเชเชจเซ เชฆเซเชฐ เชเชฐเซเชฏเชพ เชจเชฅเซ, เชคเซเชฅเซ เชเซเชเช เชฐเซเชคเซ เชเซเชกเซ เชฏเซเชเซเชฏ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเชตเซเช เชเซเชเช. เชเซ เชคเชฎเซ เชเซเช wakeup()
, เชชเชเซ เชคเซ เชธเซเชชเชทเซเช เชฅเชพเชฏ เชเซ เชเซ เชคเซ เชฎเชพเชคเซเชฐ เชเชเชเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เช
เชฎเชฒ เชฎเชพเชเซ เชคเซเชฏเชพเชฐ เชคเชฐเซเชเซ เชเชฟเชนเซเชจเชฟเชค เชเชฐเซ เชเซ, เชเซเชฅเซ เชญเชตเชฟเชทเซเชฏเชฎเชพเช sched()
เชเชฐเซเชเชฐ เชคเซเชจเซ เชฒเซเชจเซเช เชเชฐเซเชฏเซเช. เชคเซเชฅเซ readp()
เชเชพเชฐเชฃเซ wakeup()
, เชฒเซเช เชฆเซเชฐ เชเชฐเซ เชเซ, เชธเซเช เชเชฐเซ เชเซ IREAD
เช
เชจเซ เชเซเชฒเซเชธ sleep(ip+2)
- เช เชฌเชงเซเช เชชเชนเซเชฒเชพเช writep()
เชเชเซเชฐ เชซเชฐเซ เชถเชฐเซ เชเชฐเซ เชเซ.
เช เชเช เซเช เซ เชเชตเซเชคเซเชคเชฟเชฎเชพเช เชเชจเซเชตเซเชฏเชฐเชจเซเช เชตเชฐเซเชฃเชจ เชชเซเชฐเซเชฃ เชเชฐเซ เชเซ. เชธเชฐเชณ เชเซเชก, เชฆเซเชฐเชเชพเชฎเซ เชชเชฐเชฟเชฃเชพเชฎเซ.
Xv6, เชเช เชธเชฐเชณ เชฏเซเชจเชฟเชเซเชธ เชเซเชตเซ เชเชฐเซเชจเชฒ
เชเชฐเซเชจเชฒ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ
เชเซเชกเชฎเชพเช เชธเซเชชเชทเซเช เช
เชจเซ เชตเชฟเชเชพเชฐเชถเซเชฒ เช
เชฎเชฒเซเชเชฐเชฃ เชเซ pipealloc()
:
#define PIPESIZE 512
struct pipe {
struct spinlock lock;
char data[PIPESIZE];
uint nread; // number of bytes read
uint nwrite; // number of bytes written
int readopen; // read fd is still open
int writeopen; // write fd is still open
};
int
pipealloc(struct file **f0, struct file **f1)
{
struct pipe *p;
p = 0;
*f0 = *f1 = 0;
if((*f0 = filealloc()) == 0 || (*f1 = filealloc()) == 0)
goto bad;
if((p = (struct pipe*)kalloc()) == 0)
goto bad;
p->readopen = 1;
p->writeopen = 1;
p->nwrite = 0;
p->nread = 0;
initlock(&p->lock, "pipe");
(*f0)->type = FD_PIPE;
(*f0)->readable = 1;
(*f0)->writable = 0;
(*f0)->pipe = p;
(*f1)->type = FD_PIPE;
(*f1)->readable = 0;
(*f1)->writable = 1;
(*f1)->pipe = p;
return 0;
bad:
if(p)
kfree((char*)p);
if(*f0)
fileclose(*f0);
if(*f1)
fileclose(*f1);
return -1;
}
pipealloc()
เชฌเชพเชเซเชจเชพ เช
เชฎเชฒเซเชเชฐเชฃเชจเซ เชธเซเชฅเชฟเชคเชฟ เชธเซเชฏเซเชเชฟเชค เชเชฐเซ เชเซ, เชเซเชฎเชพเช เชเชพเชฐเซเชฏเซเชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ piperead()
, pipewrite()
ะธ pipeclose()
. เชตเชพเชธเซเชคเชตเชฟเช เชธเชฟเชธเซเชเชฎ เชเซเชฒ sys_pipe
เชฎเชพเช เช
เชฎเชฒเชฎเชพเช เชฎเซเชเชพเชฏเซเชฒ เชเชตเชฐเชฃ เชเซ
เชฒเชฟเชจเชเซเชธ 0.01
Linux 0.01 เชธเซเชคเซเชฐเซเชค เชเซเชก เชถเซเชงเซ เชถเชเชพเชฏ เชเซ. เชคเซเชจเชพเชฎเชพเช เชชเชพเชเชชเชฒเชพเชเชจเชจเชพ เช
เชฎเชฒเซเชเชฐเชฃเชจเซ เช
เชญเซเชฏเชพเชธ เชเชฐเชตเซ เชธเซเชเชจเชพเชคเซเชฎเช เชฐเชนเซเชถเซ fs
/pipe.c
. เช เชชเชพเชเชชเชฒเชพเชเชจเชจเซเช เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟเชคเซเชต เชเชฐเชตเชพ เชฎเชพเชเซ เชเชจเซเชกเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ, เชชเชฐเชเชคเซ เชชเชพเชเชชเชฒเชพเชเชจ เชชเซเชคเซ เชเชงเซเชจเชฟเช C เชฎเชพเช เชฒเชเชพเชฏเซเชฒ เชเซ. เชเซ เชคเชฎเซ 6เช เซเช เซ เชเชตเซเชคเซเชคเชฟ เชเซเชก เชฆเซเชตเชพเชฐเชพ เชคเชฎเชพเชฐเซ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเซเชฏเซเช เชนเซเชฏ, เชคเซ เชคเชฎเชจเซ เช
เชนเซเช เชเซเช เชฎเซเชถเซเชเซเชฒเซ เชจเชนเซเช เชชเชกเซ. เช เชซเชเชเซเชถเชจ เชเซเชตเซ เชฆเซเชเชพเชฏ เชเซ write_pipe()
:
int write_pipe(struct m_inode * inode, char * buf, int count)
{
char * b=buf;
wake_up(&inode->i_wait);
if (inode->i_count != 2) { /* no readers */
current->signal |= (1<<(SIGPIPE-1));
return -1;
}
while (count-->0) {
while (PIPE_FULL(*inode)) {
wake_up(&inode->i_wait);
if (inode->i_count != 2) {
current->signal |= (1<<(SIGPIPE-1));
return b-buf;
}
sleep_on(&inode->i_wait);
}
((char *)inode->i_size)[PIPE_HEAD(*inode)] =
get_fs_byte(b++);
INC_PIPE( PIPE_HEAD(*inode) );
wake_up(&inode->i_wait);
}
wake_up(&inode->i_wait);
return b-buf;
}
เชธเชเชฐเชเชจเชพเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเช เชเซเชฏเชพ เชตเชฟเชจเชพ เชชเชฃ, เชคเชฎเซ เชเชเซเชคเชฟ เชเชฐเซ เชถเชเซ เชเซ เชเซ เชฒเชเชพเชฃ เชเชพเชฎเชเซเชฐเซเชฎเชพเช เชชเชฐเชฟเชฃเชพเชฎ เชเชตเซ เชเซ เชเซ เชเซเชฎ เชคเซ เชเชเชพเชธเชตเชพ เชฎเชพเชเซ เชเชเชจเซเชก เชธเชเชฆเชฐเซเชญ เชเชฃเชคเชฐเซเชจเซ เชเชชเชฏเซเช เชเซเชตเซ เชฐเซเชคเซ เชฅเชพเชฏ เชเซ. SIGPIPE
. เชฌเชพเชเช-เชฌเชพเชฏ-เชฌเชพเชเช เชเชพเชฎ เชเชฐเชตเชพ เชเชชเชฐเชพเชเชค, เช เชเชพเชฐเซเชฏ เชเชชเชฐ เชตเชฐเซเชฃเชตเซเชฒ เชตเชฟเชเชพเชฐเซ เชธเชพเชฅเซ เชธเชฐเชเชพเชตเชตเชพ เชฎเชพเชเซ เชธเชฐเชณ เชเซ. เชคเชฐเซเช เชชเชฃ sleep_on
/wake_up
เชเชเชฒเซ เชเชฒเชฟเชฏเชจ เชจเชฅเซ เชฒเชพเชเชคเซ.
เชเชงเซเชจเชฟเช เชฒเชฟเชจเชเซเชธ เชเชฐเซเชจเชฒ, เชซเซเชฐเซเชฌเซเชเชธเชกเซ, เชจเซเชเชฌเซเชเชธเชกเซ, เชเชชเชจเชฌเซเชเชธเชกเซ
เชนเซเช เชเชกเชชเชฅเซ เชเซเชเชฒเชพเช เชเชงเซเชจเชฟเช เชเชฐเซเชจเชฒเซ เชฎเชพเชฐเชซเชคเซ เชเชพเชฒเซ เชนเชคเซ. เชคเซเชฎเชพเชเชจเชพ เชเซเชเชชเชฃ เชชเชพเชธเซ เชนเชตเซ เชกเชฟเชธเซเช เช เชฎเชฒเซเชเชฐเชฃ เชจเชฅเซ (เชเชถเซเชเชฐเซเชฏเชเชจเช เชจเชฅเซ). เชฒเชฟเชจเชเซเชธเชจเซเช เชชเซเชคเชพเชจเซเช เช เชฎเชฒเซเชเชฐเชฃ เชเซ. เชเซ เชเซ เชคเซเชฐเชฃ เชเชงเซเชจเชฟเช BSD เชเชฐเซเชจเชฒเซ เชเซเชจ เชกเชพเชฏเชธเชจ เชฆเซเชตเชพเชฐเชพ เชฒเชเชตเชพเชฎเชพเช เชเชตเซเชฒเชพ เชเซเชก เชชเชฐ เชเชงเชพเชฐเชฟเชค เช เชฎเชฒเซเชเชฐเชฃเซ เชงเชฐเชพเชตเซ เชเซ, เชตเชฐเซเชทเซเชฅเซ เชคเซเช เชเชเชฌเซเชเชพเชฅเซ เชเซเชฌ เช เช เชฒเช เชฅเช เชเชฏเชพ เชเซ.
เชตเชพเชเชเชตเชพ เชฎเชพเชเซ fs
/pipe.c
(เชฒเชฟเชจเชเซเชธ เชชเชฐ) เช
เชฅเชตเชพ sys
/kern
/sys_pipe.c
(*BSD เชชเชฐ), เชคเซ เชตเชพเชธเซเชคเชตเชฟเช เชธเชฎเชฐเซเชชเชฃ เชฒเซ เชเซ. เชเชเชจเซ เชเซเชก เชตเซเชเซเชเชฐ เช
เชจเซ เช
เชธเชฟเชเชเซเชฐเซเชจเชธ I/O เชเซเชตเซ เชธเซเชตเชฟเชงเชพเช เชฎเชพเชเซ เชเชพเชฎเชเซเชฐเซ เช
เชจเซ เชธเชฎเชฐเซเชฅเชจ เชตเชฟเชถเซ เชเซ. เช
เชจเซ เชฎเซเชฎเชฐเซ เชซเชพเชณเชตเชฃเซ, เชคเชพเชณเชพเช เช
เชจเซ เชเชฐเซเชจเชฒ เชฐเซเชชเชฐเซเชเชพเชเชเชจเชจเซ เชตเชฟเชเชคเซ เชฎเซเชเชพ เชชเซเชฐเชฎเชพเชฃเชฎเชพเช เชฌเชฆเชฒเชพเชฏ เชเซ. เชเซเชฒเซเชเซเชจเซ เชชเซเชฐเชพเชฐเชเชญเชฟเช เชเชชเชฐเซเชเชฟเชเช เชธเชฟเชธเซเชเชฎ เชเซเชฐเซเชธ เชฎเชพเชเซ เช เชเชฐเซเชฐเซ เชจเชฅเซ.
เชเซเชเชชเชฃ เชฐเซเชคเซ, เชฎเชจเซ เชเซเชเชฒเซเช เชเซเชจเซ เชชเซเชเชฐเซเชจ เชเซเชฆเชตเชพเชฎเชพเช เชฐเชธ เชนเชคเซ (เชเซเชฎ เชเซ เชเชจเชฐเซเช เชเชฐเชตเซเช SIGPIPE
เช
เชจเซ เชชเชพเชเชพ เชซเชฐเซ EPIPE
เชฌเชเชง เชชเชพเชเชชเชฒเชพเชเชจ เชชเชฐ เชฒเชเชคเซ เชตเชเชคเซ) เช เชคเชฎเชพเชฎ เชตเชฟเชตเชฟเชง เชเชงเซเชจเชฟเช เชเชฐเซเชจเชฒเซเชฎเชพเช. เชนเซเช เชเชฆเชพเช เชตเชพเชธเซเชคเชตเชฟเช เชเซเชตเชจเชฎเชพเช PDP-11 เชเซเชฎเซเชชเซเชฏเซเชเชฐ เชเซเชฏเชพเชฐเซเชฏ เชจเชนเซเช เชเซเชเช, เชชเชฐเชเชคเซ เชฎเชพเชฐเชพ เชเชจเซเชฎเชจเชพ เชตเชฐเซเชทเซ เชชเชนเซเชฒเชพ เชฒเชเชพเชฏเซเชฒเชพ เชเซเชกเชฎเชพเชเชฅเซ เชนเชเซ เชเชฃเซเช เชถเซเชเชตเชพเชจเซเช เชฌเชพเชเซ เชเซ.
2011 เชฎเชพเช เชฆเชฟเชตเซ เชเชชเซเชฐ เชฆเซเชตเชพเชฐเชพ เชฒเชเชพเชฏเซเชฒ เชฒเซเช:
เชธเซเชฐเซเชธ: www.habr.com