เด เดฒเตเดเดจเด Unix เดเตเตผเดฃเดฒเดฟเตฝ เดชเตเดชเตเดชเต เดฒเตเดจเตเดเตพ เดจเดเดชเตเดชเดฟเดฒเดพเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดตเดฟเดตเดฐเดฟเดเตเดเตเดจเตเดจเต. "เดเดจเตเดจ เดคเดฒเดเตเดเตเดเตเดเดฟเตฝ เด
เดเตเดคเตเดคเดฟเดเต เดเดฐเต เดฒเตเดเดจเด เดตเดจเตเดจเดคเดฟเตฝ เดเดพเตป เด
เตฝเดชเตเดชเด เดจเดฟเดฐเดพเดถเดจเดพเดฏเดฟเดฐเตเดจเตเดจเต.
เดจเดฎเตเดฎเตพ เดเดจเตเดคเดฟเดจเตเดเตเดเตเดฑเดฟเดเตเดเดพเดฃเต เดธเดเดธเดพเดฐเดฟเดเตเดเตเดจเตเดจเดคเต?
เดชเตเดชเตเดชเต เดฒเตเดจเตเดเตพ, "เดเดฐเตเดชเดเตเดทเต เดฏเตเดฃเดฟเดเตเดธเดฟเดฒเต เดเดฑเตเดฑเดตเตเด เดชเตเดฐเดงเดพเดจเดชเตเดชเตเดเตเด เดเดฃเตเดเตเดชเดฟเดเตเดคเตเดคเด", เดเตเดฑเดฟเดฏ เดชเตเดฐเตเดเตเดฐเดพเดฎเตเดเดณเต เดเดฐเตเดฎเดฟเดเตเดเต เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฏเตเดฃเดฟเดเตเดธเต เดคเดคเตเดตเดถเดพเดธเตเดคเตเดฐเดคเตเดคเดฟเตปเตเดฑเต เดจเดฟเตผเดตเดเดฟเดเตเดเตเดจเตเดจ เดธเตเดตเดญเดพเดตเดตเตเด เดเดฎเดพเตปเดกเต เดฒเตเดจเดฟเดฒเต เดชเดฐเดฟเดเดฟเดคเดฎเดพเดฏ เด เดเดฏเดพเดณเดตเตเดฎเดพเดฃเต:
$ 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 เดชเดฑเดฏเตเดจเตเดจเต
เด เดธเดเดฌเตเดฒเดฟ เดญเดพเดทเดฏเดฟเตฝ เดเดดเตเดคเดฟเดฏ เดเตเตผเดฃเดฒเตเดณเตเดณ เด เดตเดธเดพเดจ เดชเดคเดฟเดชเตเดชเดพเดฏเดฟเดฐเตเดจเตเดจเต Unix 1973rd เดชเดคเดฟเดชเตเดชเต, เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ เดชเตเดชเตเดชเต เดฒเตเดจเตเดเดณเตเดณเตเดณ เดเดฆเตเดฏ เดชเดคเดฟเดชเตเดชเตเด. XNUMX-เตฝ, เดฎเตเดจเตเดจเดพเด เดชเดคเดฟเดชเตเดชเต เดฎเตเดเตเดเดชเตเดชเตเดเตเดคเตเดคเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเตพ เดจเดเดจเตเดจเต, เดเตเตผเดฃเตฝ C-เดฏเดฟเตฝ เดฎเดพเดฑเตเดฑเดฟเดฏเตเดดเตเดคเดฟ, เด เดเตเดเดจเต Unix-เตปเตเดฑเต เดจเดพเดฒเดพเดฎเดคเตเดคเต เดชเดคเดฟเดชเตเดชเต เดชเตเดฐเดคเตเดฏเดเตเดทเดชเตเดชเตเดเตเดเต.
เดเดฐเต เดตเดพเดฏเดจเดเตเดเดพเดฐเตป เดเดฐเต เดกเตเดเตเดฏเตเดฎเตเตปเตเดฑเดฟเตปเตเดฑเต เดธเตเดเดพเตป เดเดฃเตเดเตเดคเตเดคเดฟ, เด เดคเดฟเตฝ "เดเดฐเต เดเดพเตผเดกเตป เดนเตเดธเต เดชเตเดฒเตเดฏเตเดณเตเดณ เดชเตเดฐเตเดเตเดฐเดพเดฎเตเดเตพ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเตเด" เดเดจเตเดจ เดเดถเดฏเด เดกเดเต เดฎเดเตเดเดฟเตพเดฑเตเดฏเต เดจเดฟเตผเดฆเตเดฆเตเดถเดฟเดเตเดเต.
เดฌเตเดฐเดฏเดพเตป เดเตเตผเดจเดฟเดเตปเตเดฑเต เดชเตเดธเตเดคเดเดคเตเดคเดฟเตฝ
Unix เดชเตเดฑเดคเตเดคเดฟเดฑเดเตเดเดฟเดฏเดชเตเดชเตเตพ, coroutines-เดจเตเดเตเดณเตเดณ เดเตปเตเดฑเต เดเดเตผเดทเดฃเด, OS-เตปเตเดฑเต เดฐเดเดฏเดฟเดคเดพเดตเดพเดฏ เดเตเตป เดคเตเดเดชเตโเดธเดฃเตเดเต เดเดฐเต เดชเตเดฐเตเดธเดธเตเดธเดฟเตฝ เดเดดเตเดคเดฟเดฏ เดกเดพเดฑเตเดฑ เดเดชเดเดฐเดฃเดคเตเดคเดฟเดฒเตเดเตเดเต เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดฎเดฑเตเดฑเตเดฐเต เดชเตเดฐเตเดธเดธเตเดธเดฟเดฒเตเดเตเดเต เดเดเตเดเตโเดชเตเดเตเดเต เดเตเดฏเตเดฏเดพเดจเตเด เด เดจเตเดตเดฆเดฟเดเตเดเดฃเดฎเตเดจเตเดจเต เดเดตเดถเตเดฏเดชเตเดชเตเดเดพเตป เดเดจเตเดจเต เดชเตเดฐเตเดฐเดฟเดชเตเดชเดฟเดเตเดเต. เด เดคเต เดธเดพเดงเตเดฏเดฎเดพเดฃเตเดจเตเดจเต เดเตเตป เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเต. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เดเดฐเต เดฎเดฟเดจเดฟเดฎเดฒเดฟเดธเตเดฑเตเดฑเต เดเดจเตเดจ เดจเดฟเดฒเดฏเดฟเตฝ, เดเดฒเตเดฒเดพ เดธเดฟเดธเตเดฑเตเดฑเด เดชเตเดฐเดตเตผเดคเตเดคเดจเดเตเดเดณเตเด เดเดฐเต เดชเตเดฐเดงเดพเดจ เดชเดเตเดเต เดตเดนเดฟเดเตเดเดฃเดฎเตเดจเตเดจเต เด เดฆเตเดฆเตเดนเด เดเดเตเดฐเดนเดฟเดเตเดเต. เดชเตเดฐเตเดธเดธเตเดธเตเดเตพเดเตเดเดฟเดเดฏเดฟเตฝ เดจเตเดฐเดฟเดเตเดเต เดเดดเตเดคเตเดจเตเดจเดคเต เดเดฐเต เดเตปเตเดฑเตผเดฎเตเดกเดฟเดฏเดฑเตเดฑเต เดซเดฏเดฒเดฟเดฒเตเดเตเดเต เดเดดเตเดคเตเดจเตเดจเดคเดฟเดจเตเดเตเดเดพเตพ เดตเดฒเดฟเดฏ เดจเตเดเตเดเดฎเดพเดฃเต? โเดชเตเดชเตเดชเตโเดฒเตเตปโ เดเดจเตเดจ เดเดเตผเดทเดเดฎเดพเดฏ เดชเตเดฐเตเด เดชเตเดฐเดเตเดฐเดฟเดฏเดเตพ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดเดถเดฏเดตเดฟเดจเดฟเดฎเดฏเดคเตเดคเดฟเดจเตเดณเตเดณ เดตเดพเดเตเดฏเดเดเดจเดฏเตเดเต เดตเดฟเดตเดฐเดฃเดตเตเด เดเดชเดฏเตเดเดฟเดเตเดเต เดเดพเตป เดเดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดจเดฟเตผเดฆเตเดฆเตเดถเด เดจเตฝเดเดฟเดฏเดชเตเดชเตเตพ เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดเตเตป เดเดเตเดตเดฟเตฝ เดเดเตเดฐเตเดถเดฟเดเตเดเดคเต: โเดเดพเตป เด เดคเต เดเตเดฏเตเดฏเตเด!โ
เดเตเดฏเตเดคเต. เดจเดฟเตผเดญเดพเดเตเดฏเดเดฐเดฎเดพเดฏ เดเดฐเต เดธเดพเดฏเดพเดนเตเดจเด, เดเตเตป เดเตเตผเดฃเดฒเตเด เดทเตเดฒเตเดฒเตเด เดฎเดพเดฑเตเดฑเดฟ, เดเตปเดชเตเดเตเดเต เดเดเตเดเดจเต เดธเตเดตเตเดเดฐเดฟเดเตเดเต (เดเดฐเต เดชเตเดชเตเดชเตเดฒเตเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดฐเดพเด) เดธเตเดฑเตเดฑเดพเตปเดกเตเตผเดกเต เดเตเดฏเตเดฏเดพเตป เดจเดฟเดฐเดตเดงเดฟ เดธเตเดฑเตเดฑเดพเตปเดกเตเตผเดกเต เดชเตเดฐเตเดเตเดฐเดพเดฎเตเดเตพ เดจเดฟเดถเตเดเดฏเดฟเดเตเดเต, เดเตเดเดพเดคเต เดซเดฏเดฒเตเดเดณเตเดเต เดชเตเดฐเตเดเดณเตเด เดฎเดพเดฑเตเดฑเดฟ. เด เดเตเดคเตเดค เดฆเดฟเดตเดธเด, เดชเตเดชเตเดชเตเดฒเตเดจเตเดเตพ เดเดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดเดณเดฟเตฝ เดตเดณเดฐเต เดตเตเดฏเดพเดชเดเดฎเดพเดฏเดฟ เดเดชเดฏเตเดเดฟเดเตเดเดพเตป เดคเตเดเดเตเดเดฟ. เดเดดเตโเดเดฏเตเดเต เด เดตเดธเดพเดจเดคเตเดคเตเดเต, เดตเตเดกเต เดชเตเดฐเตเดธเดธเดฑเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดฐเดฟเตปเตเดฑเดฑเดฟเดฒเตเดเตเดเต เดชเตเดฐเดฎเดพเดฃเดเตเดเตพ เด เดฏเดฏเตเดเตเดเดพเตป เดธเตเดเตเดฐเดเตเดเดฑเดฟเดฎเดพเตผ เด เดตเดฐเต เดเดชเดฏเตเดเดฟเดเตเดเต. เดเตเดฑเดเตเดเต เดเดดเดฟเดเตเดเต, เดชเตเดชเตเดชเต เดฒเตเดจเตเดเดณเตเดเต เดเดชเดฏเตเดเด เดเตเดฒเตเดจเตผ เดเตบเดตเตเตปเดทเดจเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดชเตเดคเดฟเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดเตเตป เดฏเดฅเดพเตผเดคเตเดฅ API, เดตเดพเดเตเดฏเดเดเดจ เดเดจเตเดจเดฟเดต เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเดเตเดเต, เด เดคเต เด เดจเตเดจเตเดฎเตเดคเตฝ เดเดชเดฏเตเดเดฟเดเตเดเตเดตเดฐเตเดจเตเดจเต.
เดจเดฟเตผเดญเดพเดเตเดฏเดตเดถเดพเตฝ, เดฏเตเดฃเดฟเดเตเดธเต เดเตเตผเดฃเดฒเดฟเตปเตเดฑเต เดฎเตเดจเตเดจเดพเด เดชเดคเดฟเดชเตเดชเดฟเตปเตเดฑเต เดธเตเดดเตเดธเต เดเตเดกเต เดจเดทเตเดเดชเตเดชเตเดเตเดเต. เดเตเตผเดฃเตฝ เดธเตเดดเตโเดธเต เดเตเดกเต เดธเดฟเดฏเดฟเตฝ เดเดดเตเดคเดฟเดฏเดฟเดเตเดเตเดฃเตเดเตเดเตเดเดฟเดฒเตเด
เดเดเตเดเตพเดเตเดเต เดเตเดเตเดธเตเดฑเตเดฑเต เดกเตเดเตเดฏเตเดฎเตเตปเตเดฑเตเดทเตป เดเดฃเตเดเต pipe(2)
เดฐเดฃเตเดเต เดฑเดฟเดฒเตเดธเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเตเด, เด
เดคเดฟเดจเดพเตฝ เดจเดฟเดเตเดเตพเดเตเดเต เดกเตเดเตเดฏเตเดฎเตเตปเตเดฑเตเดทเตป เดคเดฟเดฐเดฏเตเดจเตเดจเดคเดฟเดฒเตเดเต เดเดฐเดเดญเดฟเดเตเดเดพเด pipe(2)
เด
เดธเดเดฌเตเดฒเดฟ เดญเดพเดทเดฏเดฟเตฝ เดเดดเตเดคเตเดเดฏเตเด เดเดฐเต เดซเดฏเตฝ เดกเดฟเดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเตผ เดฎเดพเดคเตเดฐเด เดจเตฝเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต, เดชเดเตเดทเต เดเดคเดฟเดจเดเด เดชเตเดฐเดคเตเดเตเดทเดฟเดเตเดเตเดจเตเดจ เด
เดเดฟเดธเตเดฅเดพเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเด เดจเตฝเดเตเดจเตเดจเต:
เดธเดฟเดธเตเดฑเตเดฑเด เดเตเตพ เดชเตเดชเตเดชเต เดชเตเดชเตเดชเต เดฒเตเตป เดเดจเตเดจเต เดตเดฟเดณเดฟเดเตเดเตเดจเตเดจ เดเดฐเต เดเตปเดชเตเดเตเดเต/เดเดเตเดเตเดชเตเดเตเดเต เดฎเตเดเตเดเดพเดจเดฟเดธเด เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเต. เดฑเดฟเดเตเดเตเตบ เดซเดฏเตฝ เดกเดฟเดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเตผ เดฑเตเดกเต เดเตปเดกเต เดฑเตเดฑเตเดฑเต เดเดชเตเดชเดฑเตเดทเดจเตเดเตพเดเตเดเดพเดฏเดฟ เดเดชเดฏเตเดเดฟเดเตเดเดพเด. เดชเตเดชเตเดชเตเดฒเตเดจเดฟเดฒเตเดเตเดเต เดเดจเตเดคเตเดเตเดเดฟเดฒเตเด เดเดดเตเดคเตเดฎเตเดชเตเตพ, 504 เดฌเตเดฑเตเดฑเตเดเตพ เดตเดฐเต เดกเดพเดฑเตเดฑ เดฌเดซเตผ เดเตเดฏเตเดฏเดชเตเดชเตเดเตเด, เด เดคเดฟเดจเตเดถเตเดทเด เดเดดเตเดคเตเดคเต เดชเตเดฐเดเตเดฐเดฟเดฏ เดคเดพเตฝเดเตเดเดพเดฒเดฟเดเดฎเดพเดฏเดฟ เดจเดฟเตผเดคเตเดคเดฟเดตเดฏเตเดเตเดเตเดจเตเดจเต. เดชเตเดชเตเดชเตเดฒเตเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดพเดฏเดฟเดเตเดเตเดฎเตเดชเตเตพ, เดฌเดซเตผ เดเตเดฏเตเดค เดกเดพเดฑเตเดฑ เดเดเตเดคเตเดคเตเดเดณเดฏเตเดจเตเดจเต.
เด
เดเตเดคเตเดค เดตเตผเดทเด เดเดฏเดชเตเดชเตเดดเตเดเตเดเตเด เดเตเตผเดฃเตฝ C-เดฏเดฟเตฝ เดตเตเดฃเตเดเตเด เดเดดเตเดคเดชเตเดชเตเดเตเดเต pipe(fildes)
"
เดธเดฟเดธเตเดฑเตเดฑเด เดเตเตพ เดชเตเดชเตเดชเต เดชเตเดชเตเดชเต เดฒเตเตป เดเดจเตเดจเต เดตเดฟเดณเดฟเดเตเดเตเดจเตเดจ เดเดฐเต เดเตปเดชเตเดเตเดเต/เดเดเตเดเตเดชเตเดเตเดเต เดฎเตเดเตเดเดพเดจเดฟเดธเด เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเต. เดฑเดฟเดเตเดเตเตบ เดเตเดฏเตเดค เดซเดฏเตฝ เดกเดฟเดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเดฑเตเดเตพ เดฑเตเดกเต เดเตปเดกเต เดฑเตเดฑเตเดฑเต เดเดชเตเดชเดฑเตเดทเดจเตเดเดณเดฟเตฝ เดเดชเดฏเตเดเดฟเดเตเดเดพเด. เดชเตเดชเตเดชเตโเดฒเตเดจเดฟเตฝ เดเดจเตเดคเตเดเตเดเดฟเดฒเตเด เดเดดเตเดคเตเดฎเตเดชเตเตพ, r1 (resp. fildes[1])-เตฝ เดคเดฟเดฐเดฟเดเต เดฒเดญเดฟเดเตเดเตเดจเตเดจ เดนเดพเตปเดกเดฟเตฝ เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต, 4096 เดฌเตเดฑเตเดฑเตเดเดณเตเดเต เดกเดพเดฑเตเดฑเดฏเดฟเดฒเตเดเตเดเต เดฌเดซเตผ เดเตเดฏเตเดฏเตเดจเตเดจเต, เด เดคเดฟเดจเตเดถเตเดทเด เดเดดเตเดคเตเดคเต เดชเตเดฐเดเตเดฐเดฟเดฏ เดคเดพเตฝเดเตเดเดพเดฒเดฟเดเดฎเดพเดฏเดฟ เดจเดฟเตผเดคเตเดคเดฟเดตเดฏเตเดเตเดเตเดจเตเดจเต. เดชเตเดชเตเดชเตเดฒเตเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดพเดฏเดฟเดเตเดเตเดฎเตเดชเตเตพ, เดนเดพเตปเดกเดฟเตฝ r0 (resp. fildes[0]) เดฒเตเดเตเดเต เดฎเดเดเตเดเตเดจเตเดจเต, เดกเดพเดฑเตเดฑ เดเดเตเดเตเดเตเดจเตเดจเต.
เดเดฐเต เดชเตเดชเตเดชเต เดฒเตเตป เดจเดฟเตผเดตเดเดฟเดเตเดเตเดเดดเดฟเดเตเดเดพเตฝ, เดฐเดฃเตเดเต (เด เดฒเตเดฒเตเดเตเดเดฟเตฝ เด เดคเดฟเดฒเดงเดฟเดเดฎเต) เดเดถเดฏเดตเดฟเดจเดฟเดฎเดฏ เดชเตเดฐเดเตเดฐเดฟเดฏเดเตพ (เดคเตเดเตผเดจเตเดจเตเดณเตเดณ เดเตเดณเตเดเตพ เดตเดดเดฟ เดธเตเดทเตเดเดฟเดเตเดเดชเตเดชเตเดเตเดจเตเดจเต. เดซเตเดพเตผเดเตเดเต) เดเตเดณเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดชเตเดชเตเดชเตเดฒเตเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดกเดพเดฑเตเดฑ เดเตเดฎเดพเดฑเตเด เดตเดพเดฏเดฟเดเตเดเตเด ะธ เดเดดเตเดคเตเด.
เดเดฐเต เดชเตเดชเตเดชเต เดฒเตเตป เดตเดดเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดชเตเดฐเดเตเดฐเดฟเดฏเดเดณเตเดเต เดเดฐเต เดฐเตเดเตเดฏ เดถเตเดฐเตเดฃเดฟเดฏเต เดจเดฟเตผเดตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดทเตเดฒเตเดฒเดฟเดจเต เดเดฐเต เดตเดพเดเตเดฏเดเดเดจเดฏเตเดฃเตเดเต.
เดเดฐเต เด เดฑเตเดฑเด เดฎเดพเดคเตเดฐเดฎเตเดณเตเดณ (เดเดฒเตเดฒเดพ เดฑเตเดฑเตเดฑเดฟเดเดเต เดซเดฏเตฝ เดกเดฟเดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเดฑเตเดเดณเตเด เด เดเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต) เดถเตเดจเตเดฏเดฎเดพเดฏ เดชเตเดชเตเดชเตเดฒเตเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดพเดฏเดฟเดเตเดเดพเดจเตเดณเตเดณ เดเตเดณเตเดเตพ "เดซเดฏเดฒเดฟเตปเตเดฑเต เด เดตเดธเดพเดจเด" เดคเดฟเดฐเดฟเดเต เดจเตฝเดเตเดจเตเดจเต. เดธเดฎเดพเดจเดฎเดพเดฏ เดธเดพเดนเดเดฐเตเดฏเดคเตเดคเดฟเตฝ เดเดดเตเดคเดพเดจเตเดณเตเดณ เดเตเดณเตเดเตพ เด เดตเดเดฃเดฟเดเตเดเดชเตเดชเตเดเตเดจเตเดจเต.
เดเดฑเตเดฑเดตเตเด เดจเตเดฐเดคเตเดคเต
เดฏเตเดฃเดฟเดเตเดธเดฟเตปเตเดฑเต เดเดฑเดพเด เดชเดคเดฟเดชเตเดชเต (1975)
เดจเดฎเตเดเตเดเต Unix เดธเตเดดเตเดธเต เดเตเดกเต เดตเดพเดฏเดฟเดเตเดเดพเตป เดคเตเดเดเตเดเดพเด
เดตเตผเดทเดเตเดเดณเตเดณเด เดชเตเดธเตเดคเดเด เดฒเดฏเตบเดธเต เดฌเตเตฝ เดฒเดพเดฌเตเดธเดฟเดจเต เดชเตเดฑเดคเตเดคเต เดฒเดญเตเดฏเดฎเดพเดฏ เดฏเตเดฃเดฟเดเตเดธเต เดเตเตผเดฃเดฒเดฟเดฒเต เดเด เดฐเตเดเดฏเดพเดฏเดฟเดฐเตเดจเตเดจเต เดเดคเต. เดเดฑเดพเด เดชเดคเดฟเดชเตเดชเต เดฒเตเดธเตปเดธเต เด เดคเดฟเตปเตเดฑเต เดธเตเดดเตเดธเต เดเตเดกเต เดเดชเดฏเตเดเดฟเดเตเดเดพเตป เด เดงเตเดฏเดพเดชเดเดฐเต เด เดจเตเดตเดฆเดฟเดเตเดเตเดเตเดเดฟเดฒเตเด, เดเดดเดพเด เดชเดคเดฟเดชเตเดชเต เดฒเตเดธเตปเดธเต เด เดธเดพเดงเตเดฏเดค เดเดดเดฟเดตเดพเดเตเดเดฟเดฏเดคเดฟเดจเดพเตฝ, เดชเตเดธเตเดคเดเด เดจเดฟเดฏเดฎเดตเดฟเดฐเตเดฆเตเดงเดฎเดพเดฏเดฟ เดเตเดชเตเดชเต เดเตเดฏเตเดค เดชเดเตผเดชเตเดชเตเดเดณเตเดเต เดฐเตเดชเดคเตเดคเดฟเตฝ เดตเดฟเดคเดฐเดฃเด เดเตเดฏเตเดคเต.
เดเดจเตเดจเต เดจเดฟเดเตเดเตพเดเตเดเต เดชเตเดธเตเดคเดเดคเตเดคเดฟเตปเตเดฑเต เดเดฐเต เดฑเตเดชเตเดฐเดฟเตปเตเดฑเต เดตเดพเดเตเดเดพเด, เด
เดคเดฟเตปเตเดฑเต เดเดตเตผ เดเตเดชเตเดชเดฟ เดฎเตเดทเตเดจเดฟเตฝ เดตเดฟเดฆเตเดฏเดพเตผเดคเตเดฅเดฟเดเดณเต เดเดพเดฃเดฟเดเตเดเตเดจเตเดจเต. เดตเดพเดฑเตป เดเตเดฎเดฟเดเตเดเต เดจเดจเตเดฆเดฟ (TUHS เดชเตเดฐเตเดเดเตเดฑเตเดฑเต เดเดฐเดเดญเดฟเดเตเดเดคเต) เดจเดฟเดเตเดเตพเดเตเดเต เดกเตเตบเดฒเตเดกเต เดเตเดฏเตเดฏเดพเด
15 เดตเตผเดทเดคเตเดคเดฟเดฒเตเดฑเต เดฎเตเดฎเตเดชเต, เดจเตฝเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดธเตเดดเตเดธเต เดเตเดกเดฟเตปเตเดฑเต เดเดฐเต เดชเดเตผเดชเตเดชเต เดเดพเตป เดเตเดชเตเดชเต เดเตเดฏเตเดคเต เดฒเดฏเตบเดธเต, เดเดพเดฐเดฃเด เด เดเตเดเดพเดคเดฎเดพเดฏ เดฎเดฑเตเดฑเต เดชเดเตผเดชเตเดชเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดเตปเตเดฑเต เดชเดเตผเดชเตเดชเดฟเตปเตเดฑเต เดเตเดฃเดจเดฟเดฒเดตเดพเดฐเด เดเดจเดฟเดเตเดเต เดเดทเตเดเดชเตเดชเตเดเตเดเดฟเดฒเตเดฒ. TUHS เดเดคเตเดตเดฐเต เดจเดฟเดฒเดตเดฟเดฒเดฟเดฒเตเดฒ, เดเดจเดฟเดเตเดเต เดชเดดเดฏ เดเดฑเดตเดฟเดเดเตเดเดณเดฟเดฒเตเดเตเดเต เดเดเตโเดธเดธเต เดเดฒเตเดฒเดพเดฏเดฟเดฐเตเดจเตเดจเต. เดเดจเตเดจเดพเตฝ 1988-เตฝ, เดเดฐเต PDP9 เดเดฎเตเดชเตเดฏเตเดเตเดเดฑเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฌเดพเดเตเดเดชเตเดชเต เด เดเดเตเดเดฟเดฏ เดเดฐเต เดชเดดเดฏ 11-เดเตเดฐเดพเดเตเดเต เดเตเดชเตเดชเต เดเดพเตป เดเดฃเตเดเตเดคเตเดคเดฟ. เดเดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเตเดฃเตเดเต เดเดจเตเดจเต เดชเดฑเดฏเดพเตป เดชเตเดฐเดฏเดพเดธเดฎเดพเดฃเต, เดชเดเตเดทเต เดเดฐเต เดเตเดเตเดชเดพเดเตเดเตพ เดเตเดเดพเดคเต /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
. เดเดฆเตเดฏเด เดจเดฎเตเดฎเตพ เดเดจเตเดกเต เดฒเตเดเตเดเต เดเตเดฏเตเดฏเดฃเด (เดเตเดตเดเต เดเดพเดฃเตเด plock
/prele
).
เดคเตเดเตผเดจเตเดจเต เดเดเตเดเตพ เดเดจเตเดกเต เดฑเดซเดฑเตปเดธเต เดเตเดฃเตเดเตผ เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเตเดจเตเดจเต. เดชเตเดชเตเดชเตเดฒเตเดจเดฟเตปเตเดฑเต เดฐเดฃเตเดเดฑเตเดฑเดตเตเด เดคเตเดฑเดจเตเดจเดฟเดฐเดฟเดเตเดเตเดจเตเดจเดฟเดเดคเตเดคเตเดณเด, เดเตเดฃเตเดเตผ 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
เดเดจเตเดกเดฟเตฝ. เดเดเตเดเตพ เดธเตเดฅเดพเดจเด 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
. เดชเตเดชเตเดชเตโเดฒเตเดจเต เดชเตเดฐเดคเดฟเดจเดฟเดงเตเดเดฐเดฟเดเตเดเดพเตป เดเดคเต เดเดฐเต เดเดจเตเดกเต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต, เดเดจเตเดจเดพเตฝ เดชเตเดชเตเดชเตโเดฒเตเตป เดคเดจเตเดจเต เดเดงเตเดจเดฟเด เดธเดฟเดฏเดฟเตฝ เดเดดเตเดคเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เดเดฑเดพเด เดชเดคเดฟเดชเตเดชเต เดเตเดกเดฟเดฒเตเดเต เดจเดฟเดเตเดเตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดฟเดเตเดเตเดฃเตเดเตเดเตเดเดฟเตฝ, เดจเดฟเดเตเดเตพเดเตเดเต เดเดตเดฟเดเต เดชเตเดฐเดถเตโเดจเดเตเดเดณเตเดจเตเดจเตเดฎเดฟเดฒเตเดฒ. เดซเดเดเตเดทเตป เดเดเตเดเดจเตเดฏเดพเดฃเต เดเดพเดฃเดชเตเดชเตเดเตเดจเตเดจเดคเต 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
เด
เดคเตเดฐ เด
เดจเตเดฏเดฎเดพเดฏเดฟ เดเดพเดฃเตเดจเตเดจเดฟเดฒเตเดฒ.
เดเดงเตเดจเดฟเด เดฒเดฟเดจเดเตเดธเต เดเตเตผเดฃเดฒเตเดเตพ, FreeBSD, NetBSD, OpenBSD
เดเดพเตป เดตเตเดเด เดเดฟเดฒ เดเดงเตเดจเดฟเด เดเตเตผเดฃเดฒเตเดเดณเดฟเดฒเตเดเต เดเดเดฟ. เด เดตเดฏเตโเดเตเดเตเดจเตเดจเตเด เดเดจเดฟ เดกเดฟเดธเตโเดเต เดเดเดชเตเดฒเดฟเดฎเตเตปเตเดฑเตเดทเตป เดเดฒเตเดฒ (เด เดคเตเดญเตเดคเดชเตเดชเตเดเดพเดจเดฟเดฒเตเดฒ). เดฒเดฟเดจเดเตเดธเดฟเดจเต เด เดคเดฟเตปเตเดฑเตเดคเดพเดฏ เดจเดเดชเตเดชเดพเดเตเดเตฝ เดเดฃเตเดเต. เดฎเตเดจเตเดจเต เดเดงเตเดจเดฟเด เดฌเดฟเดเดธเตเดกเดฟ เดเตเตผเดฃเดฒเตเดเดณเดฟเตฝ เดเตเตบ เดกเตเดธเตบ เดเดดเตเดคเดฟเดฏ เดเตเดกเต เด เดเดฟเดธเตเดฅเดพเดจเดฎเดพเดเตเดเดฟเดฏเตเดณเตเดณ เดจเดฟเตผเดตเตเดตเดนเดฃเดเตเดเตพ เด เดเดเตเดเดฟเดฏเดฟเดเตเดเตเดฃเตเดเตเดเตเดเดฟเดฒเตเด, เดตเตผเดทเดเตเดเดณเดพเดฏเดฟ เด เดต เดชเดฐเดธเตเดชเดฐเด เดตเดณเดฐเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดฟเดคเตเดคเตเตผเดจเตเดจเต.
เดตเดพเดฏเดฟเดเตเดเดพเตป fs
/pipe.c
(เดฒเดฟเดจเดเตเดธเดฟเตฝ) เด
เดฒเตเดฒเตเดเตเดเดฟเตฝ sys
/kern
/sys_pipe.c
(*BSD-เตฝ), เดเดคเดฟเดจเต เดฏเดฅเดพเตผเดคเตเดฅ เดธเดฎเตผเดชเตเดชเดฃเด เดเดตเดถเตเดฏเดฎเดพเดฃเต. เดเดจเตเดจเดคเตเดคเต เดเตเดกเต เดตเตเดเตเดฑเตเดฑเตผ, เด
เดธเดฟเตปเดเตเดฐเดฃเดธเต I/O เดชเตเดฒเตเดณเตเดณ เดธเดตเดฟเดถเตเดทเดคเดเตพเดเตเดเตเดณเตเดณ เดชเตเดฐเดเดเดจเดคเตเดคเตเดฏเตเด เดชเดฟเดจเตเดคเตเดฃเดฏเตเดฏเตเด เดเตเดฑเดฟเดเตเดเตเดณเตเดณเดคเดพเดฃเต. เดฎเตเดฎเตเดฎเดฑเดฟ เด
เดฒเตเดเตเดเตเดทเตป, เดฒเตเดเตเดเตเดเตพ, เดเตเตผเดฃเตฝ เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดเดจเตเดจเดฟเดตเดฏเตเดเต เดตเดฟเดถเดฆเดพเดเดถเดเตเดเตพ เดตเดณเดฐเต เดตเตเดฏเดคเตเดฏเดพเดธเดชเตเดชเตเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต. เดเดฐเต เดเดฎเตเด เดเดชเตเดชเดฑเตเดฑเตเดฑเดฟเดเดเต เดธเดฟเดธเตเดฑเตเดฑเด เดเตเดดเตโเดธเดฟเดจเต เดเตเดณเตเดเตเดเตพเดเตเดเต เดตเตเดฃเตเดเดคเต เดเดคเดฒเตเดฒ.
เดเดจเตเดคเดพเดฏเดพเดฒเตเด, เดเดฟเดฒ เดชเดดเดฏ เดชเดพเดฑเตเดฑเตเดฃเตเดเตพ (เดเดจเดฑเตเดฑเตเดฑเดฟเดเดเต เดชเตเดฒเต) เดเตเดดเดฟเดเตเดเดพเตป เดเดจเดฟเดเตเดเต เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเต SIGPIPE
เดคเดฟเดฐเดฟเดเตเดฏเตเด EPIPE
เด
เดเดเตเด เดชเตเดชเตเดชเตเดฒเตเดจเดฟเดฒเตเดเตเดเต เดเดดเตเดคเตเดฎเตเดชเตเตพ) เด เดตเตเดฏเดคเตเดฏเดธเตเดค เดเดงเตเดจเดฟเด เดเตเตผเดฃเดฒเตเดเดณเดฟเดฒเตเดฒเตเดฒเดพเด. เดฏเดฅเดพเตผเดคเตเดฅ เดเตเดตเดฟเดคเดคเตเดคเดฟเตฝ เดเดพเตป เดเดฐเดฟเดเตเดเดฒเตเด เดเดฐเต PDP-11 เดเดฎเตเดชเตเดฏเตเดเตเดเตผ เดเดพเดฃเดฟเดฒเตเดฒ, เดชเดเตเดทเต เดเดพเตป เดเดจเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดตเตผเดทเดเตเดเตพเดเตเดเต เดฎเตเดฎเตเดชเต เดเดดเตเดคเดฟเดฏ เดเตเดกเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดจเดฟเดฏเตเด เดเดฐเตเดชเดพเดเต เดชเด เดฟเดเตเดเดพเดจเตเดฃเตเดเต.
2011-เตฝ เดฆเดฟเดตเดฟ เดเดชเตเตผ เดเดดเตเดคเดฟเดฏ เดเดฐเต เดฒเตเดเดจเด:
เด
เดตเดฒเดเดฌเด: www.habr.com