เดฏเตเดฃเดฟเด•เตเดธเดฟเตฝ เดชเตˆเดชเตเดชเต เดฒเตˆเดจเตเด•เตพ เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเต

เดฏเตเดฃเดฟเด•เตเดธเดฟเตฝ เดชเตˆเดชเตเดชเต เดฒเตˆเดจเตเด•เตพ เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเต
เดˆ เดฒเต‡เด–เดจเด‚ Unix เด•เต‡เตผเดฃเดฒเดฟเตฝ เดชเตˆเดชเตเดชเต เดฒเตˆเดจเตเด•เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต† เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดจเตเดจเต. "เดŽเดจเตเดจ เดคเดฒเด•เตเด•เต†เดŸเตเดŸเดฟเตฝ เด…เดŸเตเดคเตเดคเดฟเดŸเต† เด’เดฐเต เดฒเต‡เด–เดจเด‚ เดตเดจเตเดจเดคเดฟเตฝ เดžเดพเตป เด…เตฝเดชเตเดชเด‚ เดจเดฟเดฐเดพเดถเดจเดพเดฏเดฟเดฐเตเดจเตเดจเต.เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต Unix-เตฝ เดชเตˆเดชเตเดชเต เดฒเตˆเดจเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต?"เดคเดฟเดฐเดฟเดžเตเดžเต เด…เดฒเตเดฒ เด†เดจเตเดคเดฐเดฟเด• เด˜เดŸเดจเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต. เดžเดพเตป เด†เด•เดพเด‚เด•เตเดทเดพเดญเดฐเดฟเดคเดจเดพเดฏเดฟ, เด‰เดคเตเดคเดฐเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป เดชเดดเดฏ เด‰เดฑเดตเดฟเดŸเด™เตเด™เดณเดฟเตฝ เด•เตเดดเดฟเดšเตเดšเต.

เดจเดฎเตเดฎเตพ เดŽเดจเตเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเดพเดฃเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต?

เดชเตˆเดชเตเดชเต เดฒเตˆเดจเตเด•เตพ, "เด’เดฐเตเดชเด•เตเดทเต‡ เดฏเตเดฃเดฟเด•เตเดธเดฟเดฒเต† เดเดฑเตเดฑเดตเตเด‚ เดชเตเดฐเดงเดพเดจเดชเตเดชเต†เดŸเตเดŸ เด•เดฃเตเดŸเตเดชเดฟเดŸเตเดคเตเดคเด‚", เดšเต†เดฑเดฟเดฏ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เดณเต† เด’เดฐเตเดฎเดฟเดšเตเดšเต เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฏเตเดฃเดฟเด•เตเดธเต เดคเดคเตเดตเดถเดพเดธเตเดคเตเดฐเดคเตเดคเดฟเตปเตเดฑเต† เดจเดฟเตผเดตเดšเดฟเด•เตเด•เตเดจเตเดจ เดธเตเดตเดญเดพเดตเดตเตเด‚ เด•เดฎเดพเตปเดกเต เดฒเตˆเดจเดฟเดฒเต† เดชเดฐเดฟเดšเดฟเดคเดฎเดพเดฏ เด…เดŸเดฏเดพเดณเดตเตเดฎเดพเดฃเต:

$ echo hello | wc -c
6

เดˆ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เด•เต‡เตผเดฃเตฝ เดจเตฝเด•เตเดจเตเดจ เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เดณเดฟเดจเต† เด†เดถเตเดฐเดฏเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต pipe, เด‡เดคเต เดกเต‹เด•เตเดฏเตเดฎเต†เตปเตเดฑเต‡เดทเตป เดชเต‡เดœเตเด•เดณเดฟเตฝ เดตเดฟเดตเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดชเตˆเดชเตเดชเต (7) ะธ เดชเตˆเดชเตเดชเต (2):

เด‡เตปเตเดฑเตผเดชเตเดฐเต‹เดธเดธเต เด•เดฎเตเดฎเตเดฏเต‚เดฃเดฟเด•เตเด•เต‡เดทเดจเดพเดฏเดฟ เดชเตˆเดชเตเดชเต เดฒเตˆเดจเตเด•เตพ เด’เดฐเต เดเด•เดฆเดฟเดถ เดšเดพเดจเตฝ เดจเตฝเด•เตเดจเตเดจเต. เดชเตˆเดชเตเดชเตเดฒเตˆเดจเดฟเดจเต เด’เดฐเต เด‡เตปเดชเตเดŸเตเดŸเตเด‚ (เดŽเดดเตเดคเตเดคเต เด…เดตเดธเดพเดจเด‚) เด’เดฐเต เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเตเด‚ (เดฑเต€เดกเต เดŽเตปเดกเต) เด‰เดฃเตเดŸเต. เดชเตˆเดชเตเดชเตเดฒเตˆเดจเดฟเตปเตเดฑเต† เด‡เตปเดชเตเดŸเตเดŸเดฟเดฒเต‡เด•เตเด•เต เดŽเดดเตเดคเดฟเดฏ เดกเดพเดฑเตเดฑ เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเดฟเตฝ เดตเดพเดฏเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.

เด•เต‹เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเต 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) เด†เดฑเตเดฑเต‹เดฎเดฟเด•เต เด†เดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚, เด…เดคเดฟเดจเดพเตฝ เดธเดพเดงเดพเดฐเดฃ เดซเดฏเดฒเตเด•เตพเด•เตเด•เต (เด…เดคเตเดคเดฐเด‚ เด—เตเดฏเดพเดฐเตปเตเดฑเดฟ เดจเตฝเด•เดพเดคเตเดค) เดชเตเดฐเด•เตเดฐเดฟเดฏเด•เตพเด•เตเด•เต เดชเตˆเดชเตเดชเต เดฒเตˆเดจเดฟเดฒเต‚เดŸเต† เดชเดฐเดธเตเดชเดฐเด‚ เด†เดถเดฏเดตเดฟเดจเดฟเดฎเดฏเด‚ เดจเดŸเดคเตเดคเดพเตป เด•เดดเดฟเดฏเตเด‚.

เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เดซเดฏเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด’เดฐเต เดชเตเดฐเต‹เดธเดธเตเดธเดฟเดจเต เด…เดคเดฟเตปเตเดฑเต† เดŽเดฒเตเดฒเดพ เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเตเด‚ เด…เดคเดฟเดฒเต‡เด•เตเด•เต เดŽเดดเตเดคเดฟ เดฎเดฑเตเดฑเตŠเดฐเต เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเดฟเดฒเต‡เด•เตเด•เต เด•เตˆเดฎเดพเดฑเดพเตป เด•เดดเดฟเดฏเตเด‚. เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดฐเต เดŽเดดเตเดคเตเดคเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดตเดพเดฏเดจ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเดฎเตเดชเต‹เตพ เดชเดฐเดธเตเดชเดฐเด‚ เด…เดฑเดฟเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฌเดพเดนเตเดฏ เดธเดฟเด—เตเดจเดฒเดฟเด‚เด—เต เดธเด‚เดตเดฟเดงเดพเดจเด‚ (เดธเต†เดฎเดพเดซเต‹เตผ เดชเต‹เดฒเต†) เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเตเดฐเด•เตเดฐเดฟเดฏเด•เตพเด•เตเด•เต เดตเดณเดฐเต† เดธเดฎเดพเดจเตเดคเดฐ เดฎเต‹เดกเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. เด•เตบเดตเต†เดฏเดฑเตเด•เตพ เดˆ เด•เตเดดเดชเตเดชเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดจเดฎเตเดฎเต† เดฐเด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต.

เดจเดฎเตเดฎเตพ เดŽเดจเตเดคเดพเดฃเต เด…เดจเตเดตเต‡เดทเดฟเด•เตเด•เตเดจเตเดจเดคเต?

เด’เดฐเต เด•เตบเดตเต†เดฏเตผ เดŽเด™เตเด™เดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดธเด™เตเด•เตฝเดชเตเดชเดฟเด•เตเด•เดพเตป เดŽเดณเตเดชเตเดชเดฎเตเดณเตเดณ เดคเดฐเดคเตเดคเดฟเตฝ เดžเดพเตป เด‡เดคเต เดฒเดณเดฟเดคเดฎเดพเดฏเดฟ เดตเดฟเดถเดฆเต€เด•เดฐเดฟเด•เตเด•เตเด‚. เดจเดฟเด™เตเด™เตพ เด’เดฐเต เดฌเดซเดฑเตเด‚ เดฎเต†เดฎเตเดฎเดฑเดฟเดฏเดฟเตฝ เด•เตเดฑเดšเตเดšเต เด…เดตเดธเตเดฅเดฏเตเด‚ เด…เดจเตเดตเดฆเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดฌเดซเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดกเดพเดฑเตเดฑ เดšเต‡เตผเด•เตเด•เดพเดจเตเด‚ เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดซเด‚เด—เตเดทเดจเตเด•เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดซเดฏเตฝ เดกเดฟเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฑเตเด•เดณเดฟเดฒเต† เดฑเต€เดกเต เด†เตปเดกเต เดฑเตˆเดฑเตเดฑเต เด“เดชเตเดชเดฑเต‡เดทเดจเตเด•เดณเดฟเตฝ เดซเด‚เด—เตเดทเดจเตเด•เตพ เดตเดฟเดณเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดšเดฟเดฒ เดฎเดพเตผเด—เด™เตเด™เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดฎเตเด•เดณเดฟเตฝ เดตเดฟเดตเดฐเดฟเดšเตเดš เดชเตเดฐเดคเตเดฏเต‡เด• เดธเตเดตเดญเดพเดตเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฒเต‹เด•เตเด•เตเด•เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต.

เดžเด™เตเด™เดณเตเดŸเต† เด…เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เดฎเดพเดจเดธเดฟเด• เดฎเดพเดคเตƒเด• เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต‹ เดจเดฟเดฐเดธเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต‹ เดชเตเดฐเด•เดพเดถเดฎเตเดณเตเดณ เดตเดฟเดณเด•เตเด•เดฟเดจเต เด•เต€เดดเดฟเตฝ เด•เต‡เตผเดฃเตฝ เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เดšเต‹เดฆเตเดฏเด‚ เดšเต†เดฏเตเดฏเดพเตป เดžเด™เตเด™เตพ เด‡เดชเตเดชเต‹เตพ เดคเดฏเตเดฏเดพเดฑเดพเดฃเต. เดŽเดจเตเดจเดพเตฝ เด…เดชเตเดฐเดคเต€เด•เตเดทเดฟเดคเดฎเดพเดฏ เด•เดพเดฐเตเดฏเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เดŽเดชเตเดชเต‹เดดเตเด‚ เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•.

เดจเดฎเตเดฎเตพ เดŽเดตเดฟเดŸเต†เดฏเดพเดฃเต เดจเต‹เด•เตเด•เตเดจเตเดจเดคเต?

เดชเตเดฐเดถเดธเตเดค เดชเตเดธเตเดคเด•เดคเตเดคเดฟเตปเตเดฑเต† เดŽเตปเตเดฑเต† เด•เต‹เดชเตเดชเดฟ เดŽเดตเดฟเดŸเต†เดฏเดพเดฃเต†เดจเตเดจเต เดŽเดจเดฟเด•เตเด•เดฑเดฟเดฏเดฟเดฒเตเดฒ "เดฒเดฏเตบเดธเต เดฌเตเด•เตเด•เต"เดฏเตเดฃเดฟเด•เตเดธเต 6 เดธเต‹เดดเตเดธเต เด•เต‹เดกเดฟเดจเตŠเดชเตเดชเด‚, เดชเด•เตเดทเต‡ เดจเดจเตเดฆเดฟ เดฏเตเดฃเดฟเด•เตเดธเต เดนเต†เดฑเดฟเดฑเตเดฑเต‡เดœเต เดธเตŠเดธเตˆเดฑเตเดฑเดฟ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด“เตบเดฒเตˆเดจเดฟเตฝ เดคเดฟเดฐเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚ เดธเต‡เดพเดดเตเดธเต เด•เต‡เดพเดกเต Unix-เตปเตเดฑเต† เดชเดดเดฏ เดชเดคเดฟเดชเตเดชเตเด•เตพ.

TUHS เด†เตผเด•เตเด•เตˆเดตเดฟเดฒเต‚เดŸเต† เด…เดฒเดžเตเดžเตเดคเดฟเดฐเดฟเดฏเตเดจเตเดจเดคเต เด’เดฐเต เดฎเตเดฏเต‚เดธเดฟเดฏเด‚ เดธเดจเตเดฆเตผเดถเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเต‹เดฒเต†เดฏเดพเดฃเต. เดžเด™เตเด™เตพเด•เตเด•เต เดžเด™เตเด™เดณเตเดŸเต† เดชเด™เตเด•เดฟเดŸเตเดŸ เดšเดฐเดฟเดคเตเดฐเด‚ เดจเต‹เด•เตเด•เดพเด‚, เดชเดดเดฏ เดŸเต‡เดชเตเดชเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚ เดชเตเดฐเดฟเตปเตเดฑเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚ เดˆ เดฎเต†เดฑเตเดฑเต€เดฐเดฟเดฏเดฒเต†เดฒเตเดฒเดพเด‚ เด“เดฐเต‹เดจเตเดจเดพเดฏเดฟ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เดพเดจเตเดณเตเดณ เดจเดฟเดฐเดตเดงเดฟ เดตเตผเดทเดคเตเดคเต† เดชเดฐเดฟเดถเตเดฐเดฎเดคเตเดคเต‹เดŸเต เดŽเดจเดฟเด•เตเด•เต เดฌเดนเตเดฎเดพเดจเดฎเตเดฃเตเดŸเต. เด‡เดชเตเดชเต‹เดดเตเด‚ เด•เดพเดฃเดพเดคเดพเดฏ เด† เดถเด•เดฒเด™เตเด™เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดŽเดจเดฟเด•เตเด•เต เดจเดจเตเดจเดพเดฏเดฟ เด…เดฑเดฟเดฏเดพเด‚.

เด•เตบเดตเต†เดฏเดฑเตเด•เดณเตเดŸเต† เดชเตเดฐเดพเดคเดจ เดšเดฐเดฟเดคเตเดฐเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดจเดฎเตเดฎเตเดŸเต† เดœเดฟเดœเตเดžเดพเดธเดฏเต† เดคเตƒเดชเตเดคเดฟเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏ เดถเต‡เดทเด‚, เดคเดพเดฐเดคเดฎเตเดฏเดคเตเดคเดฟเดจเดพเดฏเดฟ เดจเดฎเตเด•เตเด•เต เด†เดงเตเดจเดฟเด• เด•เต‡เตผเดฃเดฒเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดจเต‹เด•เตเด•เดพเด‚.

เดตเดดเดฟเดฏเดฟเตฝ, pipe เดชเดŸเตเดŸเดฟเด•เดฏเดฟเดฒเต† เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เตพ เดจเดฎเตเดชเตผ 42 เด†เดฃเต sysent[]. เดฏเดพเดฆเตƒเดถเตเดšเดฟเด•เดฎเดพเดฃเต‹?

เดชเดฐเดฎเตเดชเดฐเดพเด—เดค เดฏเตเดฃเดฟเด•เตเดธเต เด•เต‡เตผเดฃเดฒเตเด•เตพ (1970โ€“1974)

เดžเดพเตป เด…เดŸเดฏเดพเดณเด™เตเด™เดณเตŠเดจเตเดจเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏเดฟเดฒเตเดฒ pipe(2) เด…เด•เดคเตเดคเตเดฎเดฟเดฒเตเดฒ PDP-7 Unix (เดœเดจเตเดตเดฐเดฟ 1970), เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด‡เตป Unix-เตปเตเดฑเต† เด†เดฆเตเดฏ เดชเดคเดฟเดชเตเดชเต (เดจเดตเด‚เดฌเตผ 1971), เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดธเต‹เดดเตเดธเต เด•เต‹เดกเดฟเดฒเต‹ เดฐเดฃเตเดŸเดพเด‚ เดชเดคเดฟเดชเตเดชเต (เดœเต‚เตบ 1972).

TUHS เดชเดฑเดฏเตเดจเตเดจเต เดฏเตเดฃเดฟเด•เตเดธเดฟเตปเตเดฑเต† เดฎเต‚เดจเตเดจเดพเด‚ เดชเดคเดฟเดชเตเดชเต (เดซเต†เดฌเตเดฐเตเดตเดฐเดฟ 1973) เด•เตบเดตเต†เดฏเดฑเตเด•เดณเตเดณเตเดณ เด†เดฆเตเดฏ เดชเดคเดฟเดชเตเดชเดพเดฏเดฟ:

เด…เดธเด‚เดฌเตเดฒเดฟ เดญเดพเดทเดฏเดฟเตฝ เดŽเดดเตเดคเดฟเดฏ เด•เต‡เตผเดฃเดฒเตเดณเตเดณ เด…เดตเดธเดพเดจ เดชเดคเดฟเดชเตเดชเดพเดฏเดฟเดฐเตเดจเตเดจเต Unix 1973rd เดชเดคเดฟเดชเตเดชเต, เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ เดชเตˆเดชเตเดชเต เดฒเตˆเดจเตเด•เดณเตเดณเตเดณ เด†เดฆเตเดฏ เดชเดคเดฟเดชเตเดชเตเด‚. XNUMX-เตฝ, เดฎเต‚เดจเตเดจเดพเด‚ เดชเดคเดฟเดชเตเดชเต เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดจเดŸเดจเตเดจเต, เด•เต‡เตผเดฃเตฝ C-เดฏเดฟเตฝ เดฎเดพเดฑเตเดฑเดฟเดฏเต†เดดเตเดคเดฟ, เด…เด™เตเด™เดจเต† Unix-เตปเตเดฑเต† เดจเดพเดฒเดพเดฎเดคเตเดคเต† เดชเดคเดฟเดชเตเดชเต เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเต.

เด’เดฐเต เดตเดพเดฏเดจเด•เตเด•เดพเดฐเตป เด’เดฐเต เดกเต‹เด•เตเดฏเตเดฎเต†เตปเตเดฑเดฟเตปเตเดฑเต† เดธเตเด•เดพเตป เด•เดฃเตเดŸเต†เดคเตเดคเดฟ, เด…เดคเดฟเตฝ "เด’เดฐเต เด—เดพเตผเดกเตป เดนเต‹เดธเต เดชเต‹เดฒเต†เดฏเตเดณเตเดณ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเด•" เดŽเดจเตเดจ เด†เดถเดฏเด‚ เดกเด—เต เดฎเด•เตเด•เดฟเตพเดฑเต‹เดฏเต เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเดšเตเดšเต.

เดฏเตเดฃเดฟเด•เตเดธเดฟเตฝ เดชเตˆเดชเตเดชเต เดฒเตˆเดจเตเด•เตพ เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเต
เดฌเตเดฐเดฏเดพเตป เด•เต†เตผเดจเดฟเด—เตปเตเดฑเต† เดชเตเดธเตเดคเด•เดคเตเดคเดฟเตฝเดฏเตเดฃเดฟเด•เตเดธเต: เด’เดฐเต เดšเดฐเดฟเดคเตเดฐเดตเตเด‚ เด’เดฐเต เด“เตผเดฎเตเดฎเด•เตเด•เตเดฑเดฟเดชเตเดชเตเด‚", เด•เตบเดตเต†เดฏเดฑเตเด•เดณเตเดŸเต† เด†เดตเดฟเตผเดญเดพเดตเดคเตเดคเดฟเตปเตเดฑเต† เดšเดฐเดฟเดคเตเดฐเดคเตเดคเดฟเตฝ, เดˆ เดฐเต‡เด–เดฏเตเด‚ เดชเดฐเดพเดฎเตผเดถเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต: "... เด‡เดคเต 30 เดตเตผเดทเดฎเดพเดฏเดฟ เดฌเต†เตฝ เดฒเดพเดฌเดฟเดฒเต† เดŽเตปเตเดฑเต† เด“เดซเต€เดธเดฟเดฒเต† เดšเตเดฎเดฐเดฟเตฝ เดคเต‚เด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต." เด‡เดตเดฟเดŸเต† เดฎเด•เตโ€Œเดฒเต‹เดฑเต‹เดฏเตเดฎเดพเดฏเตเดณเตเดณ เด…เดญเดฟเดฎเตเด–เด‚, เด•เต‚เดŸเดพเดคเต† เดฎเดฑเตเดฑเตŠเดฐเต เด•เดฅ 2014-เตฝ เดŽเดดเตเดคเดฟเดฏ เดฎเด•เตโ€Œเดฒเต‹เดฏเตโ€ŒเดฏเตเดŸเต† เด•เตƒเดคเดฟ:

Unix เดชเตเดฑเดคเตเดคเดฟเดฑเด™เตเด™เดฟเดฏเดชเตเดชเต‹เตพ, coroutines-เดจเต‹เดŸเตเดณเตเดณ เดŽเตปเตเดฑเต† เด†เด•เตผเดทเดฃเด‚, OS-เตปเตเดฑเต† เดฐเดšเดฏเดฟเดคเดพเดตเดพเดฏ เด•เต†เตป เดคเต‹เด‚เดชเตโ€Œเดธเดฃเต‹เดŸเต เด’เดฐเต เดชเตเดฐเต‹เดธเดธเตเดธเดฟเตฝ เดŽเดดเตเดคเดฟเดฏ เดกเดพเดฑเตเดฑ เด‰เดชเด•เดฐเดฃเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดฎเดฑเตเดฑเตŠเดฐเต เดชเตเดฐเต‹เดธเดธเตเดธเดฟเดฒเต‡เด•เตเด•เต เด”เดŸเตเดŸเตโ€ŒเดชเตเดŸเตเดŸเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด…เดจเตเดตเดฆเดฟเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เด†เดตเดถเตเดฏเดชเตเดชเต†เดŸเดพเตป เดŽเดจเตเดจเต† เดชเตเดฐเต‡เดฐเดฟเดชเตเดชเดฟเดšเตเดšเต. เด…เดคเต เดธเดพเดงเตเดฏเดฎเดพเดฃเต†เดจเตเดจเต เด•เต†เตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด’เดฐเต เดฎเดฟเดจเดฟเดฎเดฒเดฟเดธเตเดฑเตเดฑเต เดŽเดจเตเดจ เดจเดฟเดฒเดฏเดฟเตฝ, เดŽเดฒเตเดฒเดพ เดธเดฟเดธเตเดฑเตเดฑเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚ เด’เดฐเต เดชเตเดฐเดงเดพเดจ เดชเด™เตเด•เต เดตเดนเดฟเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เด…เดฆเตเดฆเต‡เดนเด‚ เด†เด—เตเดฐเดนเดฟเดšเตเดšเต. เดชเตเดฐเต‹เดธเดธเตเดธเตเด•เตพเด•เตเด•เดฟเดŸเดฏเดฟเตฝ เดจเต‡เดฐเดฟเดŸเตเดŸเต เดŽเดดเตเดคเตเดจเตเดจเดคเต เด’เดฐเต เด‡เตปเตเดฑเตผเดฎเต€เดกเดฟเดฏเดฑเตเดฑเต เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เต เดŽเดดเตเดคเตเดจเตเดจเดคเดฟเดจเต‡เด•เตเด•เดพเตพ เดตเดฒเดฟเดฏ เดจเต‡เดŸเตเดŸเดฎเดพเดฃเต‹? โ€œเดชเตˆเดชเตเดชเตโ€Œเดฒเตˆเตปโ€ เดŽเดจเตเดจ เด†เด•เตผเดทเด•เดฎเดพเดฏ เดชเต‡เดฐเตเด‚ เดชเตเดฐเด•เตเดฐเดฟเดฏเด•เตพ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เด†เดถเดฏเดตเดฟเดจเดฟเดฎเดฏเดคเตเดคเดฟเดจเตเดณเตเดณ เดตเดพเด•เตเดฏเด˜เดŸเดจเดฏเตเดŸเต† เดตเดฟเดตเดฐเดฃเดตเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเดพเตป เด’เดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด‚ เดจเตฝเด•เดฟเดฏเดชเตเดชเต‹เตพ เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เด•เต†เตป เด’เดŸเตเดตเดฟเตฝ เด†เด•เตเดฐเต‹เดถเดฟเดšเตเดšเดคเต: โ€œเดžเดพเตป เด…เดคเต เดšเต†เดฏเตเดฏเตเด‚!โ€

เดšเต†เดฏเตเดคเต. เดจเดฟเตผเดญเดพเด—เตเดฏเด•เดฐเดฎเดพเดฏ เด’เดฐเต เดธเดพเดฏเดพเดนเตเดจเด‚, เด•เต†เตป เด•เต‡เตผเดฃเดฒเตเด‚ เดทเต†เดฒเตเดฒเตเด‚ เดฎเดพเดฑเตเดฑเดฟ, เด‡เตปเดชเตเดŸเตเดŸเต เดŽเด™เตเด™เดจเต† เดธเตเดตเต€เด•เดฐเดฟเดšเตเดšเต (เด’เดฐเต เดชเตˆเดชเตเดชเตเดฒเตˆเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดฐเดพเด‚) เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดšเต†เดฏเตเดฏเดพเตป เดจเดฟเดฐเดตเดงเดฟ เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดจเดฟเดถเตเดšเดฏเดฟเดšเตเดšเต, เด•เต‚เดŸเดพเดคเต† เดซเดฏเดฒเตเด•เดณเตเดŸเต† เดชเต‡เดฐเตเด•เดณเตเด‚ เดฎเดพเดฑเตเดฑเดฟ. เด…เดŸเตเดคเตเดค เดฆเดฟเดตเดธเด‚, เดชเตˆเดชเตเดชเตเดฒเตˆเดจเตเด•เตพ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดฟเตฝ เดตเดณเดฐเต† เดตเตเดฏเดพเดชเด•เดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เดฟ. เด†เดดเตโ€ŒเดšเดฏเตเดŸเต† เด…เดตเดธเดพเดจเดคเตเดคเต‹เดŸเต†, เดตเต‡เดกเต เดชเตเดฐเต‹เดธเดธเดฑเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดฐเดฟเตปเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เดชเตเดฐเดฎเดพเดฃเด™เตเด™เตพ เด…เดฏเดฏเตเด•เตเด•เดพเตป เดธเต†เด•เตเดฐเดŸเตเดŸเดฑเดฟเดฎเดพเตผ เด…เดตเดฐเต† เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต. เด•เตเดฑเดšเตเดšเต เด•เดดเดฟเดžเตเดžเต, เดชเตˆเดชเตเดชเต เดฒเตˆเดจเตเด•เดณเตเดŸเต† เด‰เดชเดฏเต‹เด—เด‚ เด•เตเดฒเต€เดจเตผ เด•เตบเดตเต†เตปเดทเดจเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเตŠเดคเดฟเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เด•เต†เตป เดฏเดฅเดพเตผเดคเตเดฅ API, เดตเดพเด•เตเดฏเด˜เดŸเดจ เดŽเดจเตเดจเดฟเดต เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเดšเตเดšเต, เด…เดคเต เด…เดจเตเดจเตเดฎเตเดคเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเตเดตเดฐเตเดจเตเดจเต.

เดจเดฟเตผเดญเดพเด—เตเดฏเดตเดถเดพเตฝ, เดฏเตเดฃเดฟเด•เตเดธเต เด•เต‡เตผเดฃเดฒเดฟเตปเตเดฑเต† เดฎเต‚เดจเตเดจเดพเด‚ เดชเดคเดฟเดชเตเดชเดฟเตปเตเดฑเต† เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เดจเดทเตเดŸเดชเตเดชเต†เดŸเตเดŸเต. เด•เต‡เตผเดฃเตฝ เดธเต‹เดดเตโ€Œเดธเต เด•เต‹เดกเต เดธเดฟเดฏเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเดฒเตเด‚ เดจเดพเดฒเดพเด‚ เดชเดคเดฟเดชเตเดชเต, 1973 เดจเดตเด‚เดฌเดฑเดฟเตฝ เดชเตเดฑเดคเตเดคเดฟเดฑเด™เตเด™เดฟ, เดชเด•เตเดทเต‡ เด”เดฆเตเดฏเต‹เด—เดฟเด• เดฑเดฟเดฒเต€เดธเดฟเดจเต เดเดคเดพเดจเตเด‚ เดฎเดพเดธเด™เตเด™เตพเด•เตเด•เตเดฎเตเดฎเตเดชเต เด‡เดคเต เดชเตเดฑเดคเตเดคเตเดตเดจเตเดจเต, เดชเตˆเดชเตเดชเต เดฒเตˆเตป เดจเดŸเดชเตเดชเดพเด•เตเด•เดฒเตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒ. เดˆ เดเดคเดฟเดนเดพเดธเดฟเด•เดฎเดพเดฏ Unix เดซเด‚เด—เตโ€Œเดทเตปเตเดฑเต† เดธเต‹เดดเตโ€Œเดธเต เด•เต‹เดกเต เดจเดทเตโ€ŒเดŸเดฎเดพเดฏเดคเต เดฒเดœเตเดœเดพเด•เดฐเดฎเดพเดฃเต, เด’เดฐเตเดชเด•เตเดทเต‡ เดŽเดจเตเดจเต†เดจเตเดจเต‡เด•เตเด•เตเดฎเดพเดฏเดฟ.

เดžเด™เตเด™เตพเด•เตเด•เต เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดกเต‹เด•เตเดฏเตเดฎเต†เตปเตเดฑเต‡เดทเตป เด‰เดฃเตเดŸเต pipe(2) เดฐเดฃเตเดŸเต เดฑเดฟเดฒเต€เดธเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚, เด…เดคเดฟเดจเดพเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดกเต‹เด•เตเดฏเตเดฎเต†เตปเตเดฑเต‡เดทเตป เดคเดฟเดฐเดฏเตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต† เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเด‚ เดฎเต‚เดจเตเดจเดพเด‚ เดชเดคเดฟเดชเตเดชเต (เดšเดฟเดฒ เดตเดพเด•เตเด•เตเด•เตพเด•เตเด•เต, "เดฎเดพเดจเตเดตเดฒเดพเดฏเดฟ" เด…เดŸเดฟเดตเดฐเดฏเดฟเดŸเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เด•เตเดทเดฐเด™เตเด™เดณเตเดŸเต† ^H เดŽเดจเตเดจเดคเดฟเตปเตเดฑเต† เด’เดฐเต เดธเตเดŸเตเดฐเดฟเด‚เด—เต, เดคเตเดŸเตผเดจเตเดจเต เด’เดฐเต เด…เดŸเดฟเดตเดฐ!). เดˆ เดชเตเดฐเต‹เดŸเตเดŸเต‹-pipe(2) เด…เดธเด‚เดฌเตเดฒเดฟ เดญเดพเดทเดฏเดฟเตฝ เดŽเดดเตเดคเตเด•เดฏเตเด‚ เด’เดฐเต เดซเดฏเตฝ เดกเดฟเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตผ เดฎเดพเดคเตเดฐเด‚ เดจเตฝเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เดชเด•เตเดทเต‡ เด‡เดคเดฟเดจเด•เด‚ เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจ เด…เดŸเดฟเดธเตเดฅเดพเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดจเตฝเด•เตเดจเตเดจเต:

เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เตพ เดชเตˆเดชเตเดชเต เดชเตˆเดชเตเดชเต เดฒเตˆเตป เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด‡เตปเดชเตเดŸเตเดŸเต/เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดฎเต†เด•เตเด•เดพเดจเดฟเดธเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต. เดฑเดฟเดŸเตเดŸเต‡เตบ เดซเดฏเตฝ เดกเดฟเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตผ เดฑเต€เดกเต เด†เตปเดกเต เดฑเตˆเดฑเตเดฑเต เด“เดชเตเดชเดฑเต‡เดทเดจเตเด•เตพเด•เตเด•เดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚. เดชเตˆเดชเตเดชเตเดฒเตˆเดจเดฟเดฒเต‡เด•เตเด•เต เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดŽเดดเตเดคเตเดฎเตเดชเต‹เตพ, 504 เดฌเตˆเดฑเตเดฑเตเด•เตพ เดตเดฐเต† เดกเดพเดฑเตเดฑ เดฌเดซเตผ เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเด‚, เด…เดคเดฟเดจเตเดถเต‡เดทเด‚ เดŽเดดเตเดคเตเดคเต เดชเตเดฐเด•เตเดฐเดฟเดฏ เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด•เดฎเดพเดฏเดฟ เดจเดฟเตผเดคเตเดคเดฟเดตเดฏเตเด•เตเด•เตเดจเตเดจเต. เดชเตˆเดชเตเดชเตเดฒเตˆเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดพเดฏเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดฌเดซเตผ เดšเต†เดฏเตเดค เดกเดพเดฑเตเดฑ เดŽเดŸเตเดคเตเดคเตเด•เดณเดฏเตเดจเตเดจเต.

เด…เดŸเตเดคเตเดค เดตเตผเดทเด‚ เด†เดฏเดชเตเดชเต‹เดดเต‡เด•เตเด•เตเด‚ เด•เต‡เตผเดฃเตฝ C-เดฏเดฟเตฝ เดตเต€เดฃเตเดŸเตเด‚ เดŽเดดเตเดคเดชเตเดชเต†เดŸเตเดŸเต เดชเตˆเดชเตเดชเต (2) เดจเดพเดฒเดพเด‚ เดชเดคเดฟเดชเตเดชเดฟเตฝ เดชเตเดฐเต‹เดŸเตเดŸเต‹เดŸเตˆเดชเตเดชเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เดคเดฟเตปเตเดฑเต† เด†เดงเตเดจเดฟเด• เดฐเต‚เดชเด‚ เดธเตเดตเดจเตเดคเดฎเดพเด•เตเด•เดฟ "pipe(fildes)"

เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เตพ เดชเตˆเดชเตเดชเต เดชเตˆเดชเตเดชเต เดฒเตˆเตป เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด‡เตปเดชเตเดŸเตเดŸเต/เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดฎเต†เด•เตเด•เดพเดจเดฟเดธเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต. เดฑเดฟเดŸเตเดŸเต‡เตบ เดšเต†เดฏเตเดค เดซเดฏเตฝ เดกเดฟเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฑเตเด•เตพ เดฑเต€เดกเต เด†เตปเดกเต เดฑเตˆเดฑเตเดฑเต เด“เดชเตเดชเดฑเต‡เดทเดจเตเด•เดณเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚. เดชเตˆเดชเตเดชเตโ€Œเดฒเตˆเดจเดฟเตฝ เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดŽเดดเตเดคเตเดฎเตเดชเต‹เตพ, r1 (resp. fildes[1])-เตฝ เดคเดฟเดฐเดฟเด•เต† เดฒเดญเดฟเด•เตเด•เตเดจเตเดจ เดนเดพเตปเดกเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, 4096 เดฌเตˆเดฑเตเดฑเตเด•เดณเตเดŸเต† เดกเดพเดฑเตเดฑเดฏเดฟเดฒเต‡เด•เตเด•เต เดฌเดซเตผ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด…เดคเดฟเดจเตเดถเต‡เดทเด‚ เดŽเดดเตเดคเตเดคเต เดชเตเดฐเด•เตเดฐเดฟเดฏ เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด•เดฎเดพเดฏเดฟ เดจเดฟเตผเดคเตเดคเดฟเดตเดฏเตเด•เตเด•เตเดจเตเดจเต. เดชเตˆเดชเตเดชเตเดฒเตˆเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดพเดฏเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดนเดพเตปเดกเดฟเตฝ r0 (resp. fildes[0]) เดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เตเดจเตเดจเต, เดกเดพเดฑเตเดฑ เดŽเดŸเตเด•เตเด•เตเดจเตเดจเต.

เด’เดฐเต เดชเตˆเดชเตเดชเต เดฒเตˆเตป เดจเดฟเตผเดตเดšเดฟเดšเตเดšเตเด•เดดเดฟเดžเตเดžเดพเตฝ, เดฐเดฃเตเดŸเต (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดคเดฟเดฒเดงเดฟเด•เดฎเต‹) เด†เดถเดฏเดตเดฟเดจเดฟเดฎเดฏ เดชเตเดฐเด•เตเดฐเดฟเดฏเด•เตพ (เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เด•เต‹เดณเตเด•เตพ เดตเดดเดฟ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต. เดซเต‡เดพเตผเด•เตเด•เต) เด•เต‹เดณเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเตˆเดชเตเดชเตเดฒเตˆเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดกเดพเดฑเตเดฑ เด•เตˆเดฎเดพเดฑเตเด‚ เดตเดพเดฏเดฟเด•เตเด•เตเด• ะธ เดŽเดดเตเดคเตเด•.

เด’เดฐเต เดชเตˆเดชเตเดชเต เดฒเตˆเตป เดตเดดเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเด•เตเดฐเดฟเดฏเด•เดณเตเดŸเต† เด’เดฐเต เดฐเต‡เด–เต€เดฏ เดถเตเดฐเต‡เดฃเดฟเดฏเต† เดจเดฟเตผเดตเดšเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดทเต†เดฒเตเดฒเดฟเดจเต เด’เดฐเต เดตเดพเด•เตเดฏเด˜เดŸเดจเดฏเตเดฃเตเดŸเต.

เด’เดฐเต เด…เดฑเตเดฑเด‚ เดฎเดพเดคเตเดฐเดฎเตเดณเตเดณ (เดŽเดฒเตเดฒเดพ เดฑเตˆเดฑเตเดฑเดฟเด‚เด—เต เดซเดฏเตฝ เดกเดฟเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฑเตเด•เดณเตเด‚ เด…เดŸเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต) เดถเต‚เดจเตเดฏเดฎเดพเดฏ เดชเตˆเดชเตเดชเตเดฒเตˆเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดพเดฏเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด•เต‹เดณเตเด•เตพ "เดซเดฏเดฒเดฟเตปเตเดฑเต† เด…เดตเดธเดพเดจเด‚" เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเดจเตเดจเต. เดธเดฎเดพเดจเดฎเดพเดฏ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ เดŽเดดเตเดคเดพเดจเตเดณเตเดณ เด•เต‹เดณเตเด•เตพ เด…เดตเด—เดฃเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต.

เดเดฑเตเดฑเดตเตเด‚ เดจเต‡เดฐเดคเตเดคเต† เดธเด‚เดฐเด•เตเดทเดฟเดค เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตฝ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดฏเตเดฃเดฟเด•เตเดธเดฟเตปเตเดฑเต† เด…เดžเตเดšเดพเด‚ เดชเดคเดฟเดชเตเดชเดฟเดฒเต‡เด•เตเด•เต (เดœเต‚เตบ 1974), เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เด…เดŸเตเดคเตเดค เดฑเดฟเดฒเต€เดธเดฟเตฝ เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเดคเดฟเดจเต เดเดคเดพเดฃเตเดŸเต เดธเดฎเดพเดจเดฎเดพเดฃเต. เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เตพ เดšเต‡เตผเดคเตเดคเต, เด…เดคเดฟเดจเดพเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดžเตเดšเดพเด‚ เดชเดคเดฟเดชเตเดชเต เด’เดดเดฟเดตเดพเด•เตเด•เดพเด‚.

เดฏเตเดฃเดฟเด•เตเดธเดฟเตปเตเดฑเต† เด†เดฑเดพเด‚ เดชเดคเดฟเดชเตเดชเต (1975)

เดจเดฎเตเด•เตเด•เต Unix เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เดตเดพเดฏเดฟเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เดพเด‚ เด†เดฑเดพเด‚ เดชเดคเดฟเดชเตเดชเต (เดฎเต‡เดฏเต 1975). เดตเดฒเดฟเดฏเดคเต‹เดคเดฟเตฝ เดจเดจเตเดฆเดฟ เดฒเดฏเตบเดธเต เดฎเตเดฎเตเดชเดคเตเดคเต† เดชเดคเดฟเดชเตเดชเตเด•เดณเตเดŸเต† เด‰เดฑเดตเดฟเดŸเด™เตเด™เดณเต‡เด•เตเด•เดพเตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเดคเต เดตเดณเดฐเต† เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต:

เดตเตผเดทเด™เตเด™เดณเต‹เดณเด‚ เดชเตเดธเตเดคเด•เด‚ เดฒเดฏเตบเดธเต เดฌเต†เตฝ เดฒเดพเดฌเตเดธเดฟเดจเต เดชเตเดฑเดคเตเดคเต เดฒเดญเตเดฏเดฎเดพเดฏ เดฏเตเดฃเดฟเด•เตเดธเต เด•เต‡เตผเดฃเดฒเดฟเดฒเต† เดเด• เดฐเต‡เด–เดฏเดพเดฏเดฟเดฐเตเดจเตเดจเต เด‡เดคเต. เด†เดฑเดพเด‚ เดชเดคเดฟเดชเตเดชเต เดฒเตˆเดธเตปเดธเต เด…เดคเดฟเตปเตเดฑเต† เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เด…เดงเตเดฏเดพเดชเด•เดฐเต† เด…เดจเตเดตเดฆเดฟเดšเตเดšเต†เด™เตเด•เดฟเดฒเตเด‚, เดเดดเดพเด‚ เดชเดคเดฟเดชเตเดชเต เดฒเตˆเดธเตปเดธเต เดˆ เดธเดพเดงเตเดฏเดค เด’เดดเดฟเดตเดพเด•เตเด•เดฟเดฏเดคเดฟเดจเดพเตฝ, เดชเตเดธเตเดคเด•เด‚ เดจเดฟเดฏเดฎเดตเดฟเดฐเตเดฆเตเดงเดฎเดพเดฏเดฟ เดŸเตˆเดชเตเดชเต เดšเต†เดฏเตเดค เดชเด•เตผเดชเตเดชเตเด•เดณเตเดŸเต† เดฐเต‚เดชเดคเตเดคเดฟเตฝ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดคเต.

เด‡เดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเตเดธเตเดคเด•เดคเตเดคเดฟเตปเตเดฑเต† เด’เดฐเต เดฑเต€เดชเตเดฐเดฟเตปเตเดฑเต เดตเดพเด™เตเด™เดพเด‚, เด…เดคเดฟเตปเตเดฑเต† เด•เดตเตผ เด•เต‹เดชเตเดชเดฟ เดฎเต†เดทเต€เดจเดฟเตฝ เดตเดฟเดฆเตเดฏเดพเตผเดคเตเดฅเดฟเด•เดณเต† เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเต. เดตเดพเดฑเตป เดŸเต‚เดฎเดฟเด•เตเด•เต เดจเดจเตเดฆเดฟ (TUHS เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด†เดฐเด‚เดญเดฟเดšเตเดšเดคเต) เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเด‚ เด†เดฑเดพเด‚ เดชเดคเดฟเดชเตเดชเดฟเดจเตเดณเตเดณ เดธเต‹เดดเตเดธเต เด•เต‹เดกเตเดณเตเดณ PDF เดซเดฏเตฝ. เดซเดฏเตฝ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดŽเดคเตเดฐเดฎเดพเดคเตเดฐเด‚ เดชเดฐเดฟเดถเตเดฐเดฎเดฟเดšเตเดšเต เดŽเดจเตเดจเดคเดฟเตปเตเดฑเต† เด’เดฐเต เด†เดถเดฏเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดจเตฝเด•เดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต:

15 เดตเตผเดทเดคเตเดคเดฟเดฒเต‡เดฑเต† เดฎเตเดฎเตเดชเต, เดจเตฝเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดธเต‹เดดเตเดธเต เด•เต‹เดกเดฟเตปเตเดฑเต† เด’เดฐเต เดชเด•เตผเดชเตเดชเต เดžเดพเตป เดŸเตˆเดชเตเดชเต เดšเต†เดฏเตเดคเต เดฒเดฏเตบเดธเต, เด•เดพเดฐเดฃเด‚ เด…เดœเตเดžเดพเดคเดฎเดพเดฏ เดฎเดฑเตเดฑเต เดชเด•เตผเดชเตเดชเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดŽเตปเตเดฑเต† เดชเด•เตผเดชเตเดชเดฟเตปเตเดฑเต† เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐเด‚ เดŽเดจเดฟเด•เตเด•เต เด‡เดทเตเดŸเดชเตเดชเต†เดŸเตเดŸเดฟเดฒเตเดฒ. TUHS เด‡เดคเตเดตเดฐเต† เดจเดฟเดฒเดตเดฟเดฒเดฟเดฒเตเดฒ, เดŽเดจเดฟเด•เตเด•เต เดชเดดเดฏ เด‰เดฑเดตเดฟเดŸเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เด†เด•เตโ€Œเดธเดธเต เด‡เดฒเตเดฒเดพเดฏเดฟเดฐเตเดจเตเดจเต. เดŽเดจเตเดจเดพเตฝ 1988-เตฝ, เด’เดฐเต PDP9 เด•เดฎเตเดชเตเดฏเต‚เดŸเตเดŸเดฑเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฌเดพเด•เตเด•เดชเตเดชเต เด…เดŸเด™เตเด™เดฟเดฏ เด’เดฐเต เดชเดดเดฏ 11-เดŸเตเดฐเดพเด•เตเด•เต เดŸเต‡เดชเตเดชเต เดžเดพเตป เด•เดฃเตเดŸเต†เดคเตเดคเดฟ. เด‡เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต‹ เดŽเดจเตเดจเต เดชเดฑเดฏเดพเตป เดชเตเดฐเดฏเดพเดธเดฎเดพเดฃเต, เดชเด•เตเดทเต‡ เด’เดฐเต เด•เต‡เดŸเตเดชเดพเดŸเตเด•เตพ เด•เต‚เดŸเดพเดคเต† /usr/src/ เดŸเตเดฐเต€ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต, เด…เดคเดฟเตฝ เดญเต‚เดฐเดฟเดญเดพเด—เด‚ เดซเดฏเดฒเตเด•เดณเตเด‚ 1979 เดŽเดจเตเดจเต เดฒเต‡เดฌเตฝ เดšเต†เดฏเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เด…เดชเตเดชเต‹เดดเตเด‚ เดชเตเดฐเดพเดคเดจเดฎเดพเดฏเดฟ เดคเต‹เดจเตเดจเดฟ. เดžเดพเตป เดตเดฟเดถเตเดตเดธเดฟเดšเตเดšเดคเตเดชเต‹เดฒเต† เด…เดคเต เดเดดเดพเด‚ เดชเดคเดฟเดชเตเดชเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดคเดฟเตปเตเดฑเต† เดกเต†เดฑเดฟเดตเต‡เดฑเตเดฑเต€เดตเต PWB เด†เดฏเดฟเดฐเตเดจเตเดจเต.

เดžเดพเตป เด•เดฃเตเดŸเต†เดคเตเดคเตฝ เด’เดฐเต เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเดฏเดฟ เดŽเดŸเตเด•เตเด•เตเด•เดฏเตเด‚ เด†เดฑเดพเด‚ เดชเดคเดฟเดชเตเดชเดฟเดฒเต‡เด•เตเด•เต เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ เดธเตเดตเดฎเต‡เดงเดฏเดพ เดŽเดกเดฟเดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต. เดšเดฟเดฒ เด•เต‹เดกเตเด•เตพ เด…เดคเต‡เดชเดŸเดฟ เดคเตเดŸเตผเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ เดšเดฟเดฒเดคเต เดšเต†เดฑเตเดคเดพเดฏเดฟ เดŽเดกเดฟเดฑเตเดฑเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดฟ เดตเดจเตเดจเต, เด†เดงเตเดจเดฟเด• += เดŸเต‹เด•เตเด•เตบ เด•เดพเดฒเดนเดฐเดฃเดชเตเดชเต†เดŸเตเดŸ =+ เด†เด•เตเด•เดฟ เดฎเดพเดฑเตเดฑเดฟ. เดšเดฟเดฒ เด•เดพเดฐเตเดฏเด™เตเด™เตพ เดฒเดณเดฟเดคเดฎเดพเดฏเดฟ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฟ, เดšเดฟเดฒเดคเต เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เดฎเดพเดฑเตเดฑเดฟเดฏเต†เดดเตเดคเต‡เดฃเตเดŸเดคเดพเดฏเดฟ เดตเดจเตเดจเต, เดชเด•เตเดทเต‡ เดตเดณเดฐเต†เดฏเดงเดฟเด•เด‚ เด…เดฒเตเดฒ.

เด‡เดจเตเดจเต เดจเดฎเตเด•เตเด•เต TUHS-เตฝ เดจเดฟเดจเตเดจเต เด†เดฑเดพเด‚ เดชเดคเดฟเดชเตเดชเดฟเตปเตเดฑเต† เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เด“เตบเดฒเตˆเดจเดพเดฏเดฟ เดตเดพเดฏเดฟเด•เตเด•เดพเด‚ เด†เตผเด•เตเด•เตˆเดตเต, เดกเต†เดจเตเดจเดฟเดธเต เดฑเดฟเดšเตเดšเดฟเด•เตเด•เต เด’เดฐเต เด•เตˆ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต.

เดตเดดเดฟเดฏเดฟเตฝ, เด’เดฑเตเดฑเดจเต‹เดŸเตเดŸเดคเตเดคเดฟเตฝ, เด•เต†เตผเดจเดฟเด—เตปเตเดฑเต†เดฏเตเด‚ เดฑเดฟเดšเตเดšเดฟเดฏเตเดŸเต†เดฏเตเด‚ เด•เดพเดฒเด˜เดŸเตเดŸเดคเตเดคเดฟเดจเต เดฎเตเดฎเตเดชเตเดณเตเดณ เดธเดฟ-เด•เต‹เดกเดฟเตปเตเดฑเต† เดชเตเดฐเดงเดพเดจ เดธเดตเดฟเดถเต‡เดทเดคเดฏเดพเดฃเต เดธเด‚เด•เตเดทเดฟเดชเตเดคเดค. เดŽเตปเตเดฑเต† เดธเตˆเดฑเตเดฑเดฟเดฒเต† เดคเดพเดฐเดคเดฎเตเดฏเต‡เดจ เด‡เดŸเตเด™เตเด™เดฟเดฏ เดกเดฟเดธเตเดชเตเดฒเต‡ เดเดฐเดฟเดฏเดฏเตเด•เตเด•เต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดตเดฟเดชเตเดฒเดฎเดพเดฏ เดŽเดกเดฟเดฑเตเดฑเดฟเด‚เด—เต เด•เต‚เดŸเดพเดคเต† เด•เต‹เดกเดฟเตปเตเดฑเต† เดญเดพเด—เด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เดพเตป เดŽเดจเดฟเด•เตเด•เต เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เดธเดพเดงเดฟเด•เตเด•เดพเดฑเดฟเดฒเตเดฒ.

เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเตฝ /usr/sys/ken/pipe.c เด’เดฐเต เดตเดฟเดถเดฆเต€เด•เดฐเดฃ เด•เดฎเตปเตเดฑเต เด‰เดฃเตเดŸเต (เด…เดคเต†, เด•เต‚เดŸเตเดคเตฝ เด‰เดฃเตเดŸเต /usr/sys/dmr):

/*
 * 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 เดซเดฏเดฒเตเด•เดณเต† เดธเด‚เดฌเดจเตเดงเดฟเดšเตเดšเดฟเดŸเดคเตเดคเต‹เดณเด‚, เด…เดต เดฏเต‹เดœเดฟเด•เตเด•เตเดจเตเดจเต เด‡เดจเต‹เดกเต เดซเตเดฒเดพเด—เต 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;
}

เด‡เดตเดฟเดŸเต† เดŽเดจเตเดคเดพเดฃเต เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเดคเต†เดจเตเดจเต เด•เดฎเตปเตเดฑเต เดตเตเดฏเด•เตเดคเดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดŽเดจเตเดจเดพเตฝ เด•เต‹เดกเต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเต เด…เดคเตเดฐ เดŽเดณเตเดชเตเดชเดฎเดฒเตเดฒ, เดญเดพเด—เดฟเด•เดฎเดพเดฏเดฟ เด•เดพเดฐเดฃเด‚ "struct user uยป เด•เต‚เดŸเดพเดคเต† เดฐเดœเดฟเดธเตเดฑเตเดฑเดฑเตเด•เดณเตเด‚ R0 ะธ R1 เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เตพ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเตเด‚ เดฑเดฟเดŸเตเดŸเต‡เตบ เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเด‚ เด•เดŸเดจเตเดจเตเดชเต‹เดฏเดฟ.

เด•เต‚เดŸเต† เดถเตเดฐเดฎเดฟเด•เตเด•เดพเด‚ ialloc() เดกเดฟเดธเตเด•เดฟเตฝ เด‡เดŸเตเดŸเต เดเดจเต‹เดกเต (เด‡เตปเดกเด•เตเดธเต เดนเดพเตปเดกเดฟเตฝ), เด’เดชเตเดชเด‚ เดธเดนเดพเดฏเดคเตเดคเต‹เดŸเต† เดซเดพเดฒเต‹เด•เตเด•เต() - เดฐเดฃเตเดŸเต†เดฃเตเดฃเด‚ เด“เตผเดฎเตเดฎเดฏเดฟเตฝ เดตเดฏเตเด•เตเด•เตเด• เดซเดฏเตฝ. เดŽเดฒเตเดฒเดพเด‚ เดถเดฐเดฟเดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดˆ เดซเดฏเดฒเตเด•เดณเต† เดชเตˆเดชเตเดชเตเดฒเตˆเดจเดฟเตปเตเดฑเต† เดฐเดฃเตเดŸเต เด…เดฑเตเดฑเด™เตเด™เดณเดพเดฏเดฟ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเดพเตป เดžเด™เตเด™เตพ เดซเตเดฒเดพเด—เตเด•เตพ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเด‚, เด…เดตเดฏเต† เด…เดคเต‡ เดเดจเต‹เดกเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เดฏเดฟเตปเตเดฑเต เดšเต†เดฏเตเดฏเตเด• (เด…เดคเดฟเตปเตเดฑเต† เดฑเดซเดฑเตปเดธเต เดŽเดฃเตเดฃเด‚ 2 เด†เดฏเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเด‚), เด•เต‚เดŸเดพเดคเต† เดเดจเต‹เดกเต เดชเดฐเดฟเดทเตเด•เดฐเดฟเดšเตเดšเดคเตเด‚ เด‰เดชเดฏเต‹เด—เดคเตเดคเดฟเดฒเตเดณเตเดณเดคเตเดฎเดพเดฃเต†เดจเตเดจเต เด…เดŸเดฏเดพเดณเดชเตเดชเต†เดŸเตเดคเตเดคเตเด‚. เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด• iput() เดชเตเดคเดฟเดฏ เดเดจเต‹เดกเดฟเดฒเต† เดฑเดซเดฑเตปเดธเต เดŽเดฃเตเดฃเด‚ เด•เตเดฑเดฏเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเดฟเดถเด•เต เดชเดพเดคเด•เดณเดฟเตฝ.

pipe() เด•เดŸเดจเตเดจเต เดตเต‡เดฃเด‚ R0 ะธ R1 เดตเดพเดฏเดฟเด•เตเด•เดพเดจเตเด‚ เดŽเดดเตเดคเดพเดจเตเด‚ เดซเดฏเตฝ เดกเดฟเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตผ เดจเดฎเตเดชเดฑเตเด•เตพ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเด•. falloc() เดซเดฏเตฝ เด˜เดŸเดจเดฏเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดชเต‹เดฏเดฟเตปเตเดฑเตผ เดจเตฝเด•เตเดจเตเดจเต, เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ เดตเดดเดฟ "เดฎเดŸเด™เตเด™เตเดจเตเดจเต" u.u_ar0[R0] เด’เดฐเต เดซเดฏเตฝ เดกเดฟเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฑเตเด‚. เด…เดคเดพเดฏเดคเต, เด•เต‹เดกเต เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต r เดตเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดซเดฏเตฝ เดกเดฟเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตผ เด•เต‚เดŸเดพเดคเต† เดจเต‡เดฐเดฟเดŸเตเดŸเต เดŽเดดเตเดคเดพเตป เด’เดฐเต เดซเดฏเตฝ เดกเดฟเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตผ เดจเตฝเด•เตเดจเตเดจเต u.u_ar0[R0] เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เด•เต‹เดณเดฟเดจเต เดถเต‡เดทเด‚ falloc().

เดซเตเดฒเดพเด—เต FPIPE, เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดžเด™เตเด™เตพ เดธเดœเตเดœเดฎเดพเด•เตเด•เตเดจเตเดจเดคเต, เดซเด‚เด—เตเดทเตปเตเดฑเต† เดธเตเดตเดญเดพเดตเดคเตเดคเต† เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เตเดจเตเดจเต rdwr() in sys2.cเดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ I/O เดฆเดฟเดจเดšเดฐเตเดฏเด•เตพ เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต:

/*
 * 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(). เด…เดตเดฏเดฟเตฝ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต slp.c, "เดจเดฟเด™เตเด™เตพ เด‡เดคเต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เตเดฎเต†เดจเตเดจเต เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ" เดŽเดจเตเดจ เดชเตเดฐเดธเดฟเดฆเตเดงเดฎเดพเดฏ เด…เดญเดฟเดชเตเดฐเดพเดฏเดคเตเดคเดฟเตปเตเดฑเต† เด‰เดฑเดตเดฟเดŸเด‚. เดญเดพเด—เตเดฏเดตเดถเดพเตฝ, เดžเด™เตเด™เตพ เด•เต‹เดกเต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ, เดšเดฟเดฒ เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เตพ เดจเต‹เด•เตเด•เตเด•:

/*
 * 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(), เด…เดคเต เดชเตˆเดชเตเดชเตเดฒเตˆเดจเดฟเดฒเต‡เด•เตเด•เต เด•เตเดฑเดšเตเดšเต เดกเดพเดฑเตเดฑ เดŽเดดเตเดคเตเดฎเตเดชเต‹เตพ.

เดŽเดจเตเดจเดคเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เตพ readi() and writei() " เดŽเดจเตเดจเดคเดฟเดฒเต‚เดŸเต† เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เด•เตˆเดฎเดพเดฑเตเดจเตเดจเดคเดฟเดจเตเดชเด•เดฐเด‚ เด…เดคเต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เดธเดนเดพเดฏเดฟเด•เตเด•เตเด‚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() เดธเตˆเด•เตเด•เดฟเตพ เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต.

เด‡เดคเต เด†เดฑเดพเด‚ เดชเดคเดฟเดชเตเดชเดฟเดฒเต† เด•เตบเดตเต†เดฏเดฑเตเด•เดณเตเดŸเต† เดตเดฟเดตเดฐเดฃเด‚ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เตเดจเตเดจเต. เดฒเดณเดฟเดคเดฎเดพเดฏ เด•เต‹เดกเต, เดฆเต‚เดฐเดตเตเดฏเดพเดชเด•เดฎเดพเดฏ เด…เดจเดจเตเดคเดฐเดซเดฒเด™เตเด™เตพ.

เดฏเตเดฃเดฟเด•เตเดธเดฟเตปเตเดฑเต† เดเดดเดพเด‚ เดชเดคเดฟเดชเตเดชเต (เดœเดจเตเดตเดฐเดฟ 1979) เดจเดฟเดฐเดตเดงเดฟ เดชเตเดคเดฟเดฏ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเตเด‚ เด•เต‡เตผเดฃเตฝ เดธเดตเดฟเดถเต‡เดทเดคเด•เดณเตเด‚ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเดšเตเดš เด’เดฐเต เดชเตเดคเดฟเดฏ เดชเตเดฐเดงเดพเดจ เดชเดคเดฟเดชเตเดชเดพเดฏเดฟเดฐเตเดจเตเดจเต (เดจเดพเดฒเต เดตเตผเดทเดคเตเดคเดฟเดจเต เดถเต‡เดทเด‚). เดŸเตˆเดชเตเดชเต เด•เดพเดธเตเดฑเตเดฑเดฟเด‚เด—เต, เดฏเต‚เดฃเดฟเดฏเดจเตเด•เตพ, เด˜เดŸเดจเด•เดณเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดŸเตˆเดชเตเดชเต เดšเต†เดฏเตเดค เดชเต‹เดฏเดฟเตปเตเดฑเดฑเตเด•เตพ เดŽเดจเตเดจเดฟเดตเดฏเตเดŸเต† เด‰เดชเดฏเต‹เด—เดตเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸเต เด‡เดคเต เด•เดพเดฐเตเดฏเดฎเดพเดฏ เดฎเดพเดฑเตเดฑเด™เตเด™เตพเด•เตเด•เต เดตเดฟเดงเต‡เดฏเดฎเดพเดฏเดฟ. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚ เด•เตบเดตเต†เดฏเตผ เด•เต‹เดกเต เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เดฎเดพเดฑเตเดฑเดฎเดฟเดฒเตเดฒ. เดจเดฎเตเด•เตเด•เต เดˆ เดชเดคเดฟเดชเตเดชเต เด’เดดเดฟเดตเดพเด•เตเด•เดพเด‚.

Xv6, เดฏเตเดฃเดฟเด•เตเดธเต เดชเต‹เดฒเต†เดฏเตเดณเตเดณ เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เด•เต‡เตผเดฃเตฝ

เด•เต‡เตผเดฃเตฝ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป Xv6 เดฏเตเดฃเดฟเด•เตเดธเดฟเตปเตเดฑเต† เด†เดฑเดพเด‚ เดชเดคเดฟเดชเตเดชเต เดธเตเดตเดพเดงเต€เดจเดฟเดšเตเดšเต, เดชเด•เตเดทเต‡ x86 เดชเตเดฐเตŠเดธเดธเดฑเตเด•เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เด†เดงเตเดจเดฟเด• เดธเดฟเดฏเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด•เต‹เดกเต เดตเดพเดฏเดฟเด•เตเด•เดพเตป เดŽเดณเตเดชเตเดชเดตเตเด‚ เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดพเดตเตเดจเตเดจเดคเตเดฎเดพเดฃเต. เด•เต‚เดŸเดพเดคเต†, TUHS เด‰เดณเตเดณ Unix เด‰เดฑเดตเดฟเดŸเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏเดฟ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดคเต เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดชเดฐเดฟเดทเตโ€Œเด•เตเด•เดฐเดฟเด•เตเด•เดพเดจเตเด‚ PDP 11/70 เด…เดฒเตเดฒเดพเดคเต† เดฎเดฑเตเดฑเตŠเดจเตเดจเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚. เด…เดคเดฟเดจเดพเตฝ, เดˆ เด•เต‡เตผเดฃเตฝ เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเดฟเด‚เด—เต เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เดณเดฟเดฒเต† เดตเดฟเดฆเตเดฏเดพเดญเตเดฏเดพเดธ เดธเดพเดฎเด—เตเดฐเดฟเดฏเดพเดฏเดฟ เดธเตผเดตเด•เดฒเดพเดถเดพเดฒเด•เดณเดฟเตฝ เดตเตเดฏเดพเดชเด•เดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ Github-เตฝ เด‰เดฃเตเดŸเต.

เด•เต‹เดกเดฟเตฝ เดตเตเดฏเด•เตเดคเดตเตเด‚ เดšเดฟเดจเตเดคเดจเต€เดฏเดตเตเดฎเดพเดฏ เดจเดŸเดชเตเดชเดพเด•เตเด•เตฝ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดชเตˆเดชเตเดชเต.เดธเดฟ, เดกเดฟเดธเตเด•เดฟเตฝ เด’เดฐเต เดเดจเต‹เดกเดฟเดจเต เดชเด•เดฐเด‚ เดฎเต†เดฎเตเดฎเดฑเดฟเดฏเดฟเตฝ เด’เดฐเต เดฌเดซเตผ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต. เด‡เดตเดฟเดŸเต† เดžเดพเตป "เด˜เดŸเดจเดพเดชเดฐเดฎเดพเดฏ เดชเตˆเดชเตเดชเตเดฒเตˆเตป" เดŽเดจเตเดจเดคเดฟเตปเตเดฑเต†เดฏเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเตปเตเดฑเต†เดฏเตเด‚ เดจเดฟเตผเดตเดšเดจเด‚ เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดจเตฝเด•เตเดจเตเดจเดคเต 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 เด’เดฐเต เดฑเดพเดชเตเดชเตผ เด†เดฃเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏเดคเต sysfile.c. เด…เดฆเตเดฆเต‡เดนเดคเตเดคเดฟเตปเตเดฑเต† เดฎเตเดดเตเดตเตป เด•เต‹เดกเตเด‚ เดตเดพเดฏเดฟเด•เตเด•เดพเตป เดžเดพเตป เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดธเด™เตเด•เต€เตผเดฃเตเดฃเดค เด†เดฑเดพเด‚ เดชเดคเดฟเดชเตเดชเดฟเตปเตเดฑเต† เดธเต‹เดดเตเดธเต เด•เต‹เดกเดฟเตปเตเดฑเต† เดคเดฒเดคเตเดคเดฟเดฒเดพเดฃเต, เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เดตเดพเดฏเดฟเด•เตเด•เดพเตป เดตเดณเดฐเต† เดŽเดณเตเดชเตเดชเดตเตเด‚ เด•เต‚เดŸเตเดคเตฝ เด†เดธเตเดตเดพเดฆเตเดฏเด•เดฐเดตเตเดฎเดพเดฃเต.

เดฒเดฟเดจเด•เตเดธเต 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-เตฝ เดฆเดฟเดตเดฟ เด•เดชเต‚เตผ เดŽเดดเตเดคเดฟเดฏ เด’เดฐเต เดฒเต‡เด–เดจเด‚:เดชเตˆเดชเตเดชเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดซเดฟเดซเต‹เด•เดณเตเดŸเต†เดฏเตเด‚ เดฒเดฟเดจเด•เตเดธเต เด•เต‡เตผเดฃเตฝ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตฝ"เดฒเดฟเดจเด•เตเดธเดฟเตฝ เดชเตˆเดชเตเดชเต เดฒเตˆเดจเตเด•เตพ (เด‡เดชเตเดชเต‹เดดเตเด‚) เดŽเด™เตเด™เดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเดคเดฟเตปเตเดฑเต† เด’เดฐเต เด…เดตเดฒเต‹เด•เดจเด‚ เดจเตฝเด•เตเดจเตเดจเต. เดŽ Linux-เตฝ เดธเดฎเต€เดชเด•เดพเดฒ เดชเตเดฐเดคเดฟเดฌเดฆเตเดงเดค เด†เดถเดฏเดตเดฟเดจเดฟเดฎเดฏเดคเตเดคเดฟเตปเตเดฑเต† เดชเตˆเดชเตเดชเต เดฒเตˆเตป เดฎเดพเดคเตƒเด• เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเตปเตเดฑเต† เด•เดดเดฟเดตเตเด•เตพ เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด• เดซเดฏเดฒเตเด•เดณเต‡เด•เตเด•เดพเตพ เด•เต‚เดŸเตเดคเดฒเดพเดฃเต; เด†เดฑเดพเด‚ เดชเดคเดฟเดชเตเดชเดพเดฏ เดฏเตเดฃเดฟเด•เตเดธเต เด•เต‡เตผเดฃเดฒเดฟเตปเตเดฑเต† "เดตเดณเดฐเต† เดฏเดพเดฅเดพเดธเตเดฅเดฟเดคเดฟเด• เดฒเต‹เด•เตเด•เดฟเด‚เด—เดฟเตฝ" เดจเดฟเดจเตเดจเต เดชเตˆเดชเตเดชเตเดฒเตˆเดจเตเด•เตพ เดŽเดคเตเดฐเดคเตเดคเต‹เดณเด‚ เดตเดจเตเดจเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเตเด‚ เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•