แƒ แƒแƒ’แƒแƒ  แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ”แƒ‘แƒ˜ Unix-แƒจแƒ˜

แƒ แƒแƒ’แƒแƒ  แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ”แƒ‘แƒ˜ Unix-แƒจแƒ˜
แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ แƒแƒฆแƒฌแƒ”แƒ แƒก แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒแƒก Unix แƒ‘แƒ˜แƒ แƒ—แƒ•แƒจแƒ˜. แƒ›แƒ” แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒฌแƒ˜แƒšแƒแƒ“ แƒ˜แƒ›แƒ”แƒ“แƒ’แƒแƒชแƒ แƒฃแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ•แƒ˜แƒงแƒแƒ•แƒ˜, แƒ แƒแƒ› แƒ‘แƒแƒšแƒ แƒกแƒขแƒแƒขแƒ˜แƒ แƒกแƒแƒ—แƒแƒฃแƒ แƒ˜แƒ— "แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ”แƒ‘แƒ˜ Unix-แƒจแƒ˜?"แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ แƒแƒ แƒแƒ แƒ˜แƒก แƒจแƒ˜แƒ“แƒ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒ“แƒแƒ•แƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ“แƒ˜ แƒ“แƒ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒกแƒแƒžแƒแƒ•แƒœแƒ”แƒšแƒแƒ“ แƒซแƒ•แƒ”แƒš แƒฌแƒงแƒแƒ แƒแƒ”แƒ‘แƒจแƒ˜ แƒฉแƒแƒ•แƒ แƒ—แƒ”.

แƒ แƒแƒ–แƒ” แƒ•แƒกแƒแƒฃแƒ‘แƒ แƒแƒ‘แƒ—?

Pipelines, "แƒแƒšแƒ‘แƒแƒ— แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒ’แƒแƒ›แƒแƒ’แƒแƒœแƒ”แƒ‘แƒ 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()แƒ“แƒแƒ›แƒแƒœแƒขแƒแƒŸแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“. แƒ”แƒ แƒ—แƒ˜ แƒ‘แƒแƒ•แƒจแƒ•แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒฌแƒ”แƒ แƒก แƒ”แƒ แƒ— แƒกแƒแƒฎแƒ”แƒšแƒฃแƒ แƒ–แƒ”, แƒฎแƒแƒšแƒ แƒ›แƒ”แƒแƒ แƒ” แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒก แƒ˜แƒ›แƒแƒ•แƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒ›แƒ”แƒแƒ แƒ” แƒกแƒแƒฎแƒ”แƒšแƒฃแƒ แƒ˜แƒ“แƒแƒœ. แƒญแƒฃแƒ แƒ•แƒ˜ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก dup2-แƒก 3 แƒ“แƒ 4 แƒ“แƒ”แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒแƒ แƒ”แƒ‘แƒ˜แƒก "แƒ’แƒแƒ“แƒแƒ แƒฅแƒ›แƒ”แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก" stdin-แƒ˜แƒกแƒ แƒ“แƒ stdout-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒขแƒงแƒ•แƒ˜แƒกแƒแƒ“.

แƒ›แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”, แƒญแƒฃแƒ แƒ•แƒ˜ แƒฃแƒœแƒ“แƒ แƒฉแƒแƒฌแƒ”แƒ แƒแƒก แƒ”แƒ แƒ—แƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒคแƒแƒ˜แƒšแƒจแƒ˜ แƒ“แƒ แƒ’แƒแƒ“แƒแƒกแƒชแƒ”แƒก แƒกแƒฎแƒ•แƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒก แƒคแƒแƒ˜แƒšแƒ˜แƒ“แƒแƒœ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒฌแƒแƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒแƒ“. แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒฎแƒแƒ แƒฏแƒแƒ•แƒ— แƒ›แƒ”แƒข แƒ แƒ”แƒกแƒฃแƒ แƒกแƒก แƒ“แƒ แƒแƒ“แƒ’แƒ˜แƒšแƒก แƒ“แƒ˜แƒกแƒ™แƒ–แƒ”. แƒ—แƒฃแƒ›แƒชแƒ, แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ”แƒ‘แƒ˜ แƒ™แƒแƒ แƒ’แƒ˜แƒ แƒแƒ แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒ›แƒ˜แƒขแƒแƒ›, แƒ แƒแƒ› แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒแƒ˜แƒชแƒ˜แƒšแƒแƒ— แƒ“แƒ แƒแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ:

แƒ—แƒฃ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒชแƒ“แƒ˜แƒšแƒแƒ‘แƒก แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒก แƒชแƒแƒ แƒ˜แƒ”แƒšแƒ˜ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒ“แƒแƒœ, แƒ›แƒแƒจแƒ˜แƒœ read(2) แƒ“แƒแƒ˜แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ แƒ›แƒแƒœแƒแƒ›, แƒกแƒแƒœแƒแƒ› แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒแƒ  แƒ’แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜. แƒ—แƒฃ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒชแƒ“แƒ˜แƒšแƒแƒ‘แƒก แƒฉแƒแƒฌแƒ”แƒ แƒแƒก แƒกแƒ แƒฃแƒš แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ–แƒ”, แƒ›แƒแƒจแƒ˜แƒœ write(2) แƒ“แƒแƒ˜แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒ แƒ›แƒแƒœแƒแƒ›, แƒกแƒแƒœแƒแƒ› แƒแƒ  แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ‘แƒ แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒ“แƒแƒœ แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒšแƒแƒ“.

POSIX แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ›แƒกแƒ’แƒแƒ•แƒกแƒแƒ“, แƒ”แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒ—แƒ•แƒ˜แƒกแƒ”แƒ‘แƒแƒ: แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ–แƒ” แƒฌแƒ”แƒ แƒ แƒ›แƒ“แƒ” PIPE_BUF แƒ‘แƒแƒ˜แƒขแƒ˜ (แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ› 512) แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒแƒขแƒแƒ›แƒฃแƒ แƒ˜, แƒ แƒแƒ—แƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒ›แƒ แƒจแƒ”แƒซแƒšแƒแƒœ แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒ—แƒแƒœ แƒ™แƒแƒ›แƒฃแƒœแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ (แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒ  แƒ˜แƒซแƒšแƒ”แƒ•แƒ แƒแƒกแƒ”แƒ— แƒ’แƒแƒ แƒแƒœแƒขแƒ˜แƒ”แƒ‘แƒก) แƒแƒ  แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒแƒ—.

แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒแƒก, แƒžแƒ แƒแƒชแƒ”แƒกแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒฉแƒแƒฌแƒ”แƒ แƒแƒก แƒ›แƒแƒกแƒ–แƒ” แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒ“แƒ แƒ’แƒแƒ“แƒแƒกแƒชแƒ”แƒก แƒกแƒฎแƒ•แƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒก. แƒแƒœ แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒ›แƒฃแƒจแƒแƒแƒœ แƒฃแƒแƒฆแƒ แƒ”แƒกแƒแƒ“ แƒžแƒแƒ แƒแƒšแƒ”แƒšแƒฃแƒ  แƒ แƒ”แƒŸแƒ˜แƒ›แƒจแƒ˜, แƒ’แƒแƒ แƒ” แƒกแƒแƒกแƒ˜แƒ’แƒœแƒแƒšแƒ แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— (แƒ แƒแƒ’แƒแƒ แƒช แƒกแƒ”แƒ›แƒแƒคแƒแƒ แƒ˜), แƒ แƒแƒ—แƒ แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒก แƒแƒชแƒœแƒแƒ‘แƒแƒœ แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒแƒœ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒกแƒแƒก. แƒ™แƒแƒœแƒ•แƒ”แƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜ แƒ’แƒ•แƒ˜แƒฎแƒกแƒœแƒ˜แƒก แƒแƒ› แƒฃแƒกแƒ˜แƒแƒ›แƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ.

แƒ แƒแƒก แƒ•แƒ”แƒซแƒ”แƒ‘แƒ—?

แƒ›แƒ” แƒแƒ’แƒ˜แƒฎแƒกแƒœแƒ˜แƒ— แƒ›แƒแƒก แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ—แƒ แƒ’แƒแƒ’แƒ˜แƒแƒ“แƒ•แƒ˜แƒšแƒ“แƒ”แƒ— แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ, แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ™แƒแƒœแƒ•แƒ”แƒ˜แƒ”แƒ แƒ˜. แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒงแƒแƒ— แƒ‘แƒฃแƒคแƒ”แƒ แƒ˜ แƒ“แƒ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜. แƒ“แƒแƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ‘แƒฃแƒคแƒ”แƒ แƒ˜แƒ“แƒแƒœ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒ›แƒแƒขแƒ”แƒ‘แƒšแƒแƒ“ แƒ“แƒ แƒแƒ›แƒแƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“. แƒ“แƒแƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒซแƒแƒฎแƒ”แƒ‘แƒšแƒแƒ“ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ”แƒ‘แƒ–แƒ” แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒกแƒ แƒ“แƒ แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒก. แƒ“แƒ แƒ“แƒแƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒกแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜ แƒ–แƒ”แƒ›แƒแƒ— แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒฅแƒชแƒ”แƒ•แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒšแƒแƒ“.

แƒแƒฎแƒšแƒ แƒฉแƒ•แƒ”แƒœ แƒ›แƒ–แƒแƒ“ แƒ•แƒแƒ แƒ— แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ— แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒ™แƒแƒ“แƒ˜ แƒœแƒแƒ—แƒ”แƒšแƒ˜ แƒœแƒแƒ—แƒฃแƒ แƒ˜แƒก แƒจแƒฃแƒฅแƒ˜แƒก แƒฅแƒ•แƒ”แƒจ, แƒ แƒแƒ—แƒ แƒ“แƒแƒ•แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒแƒ— แƒแƒœ แƒฃแƒแƒ แƒ•แƒงแƒแƒ— แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ‘แƒฃแƒœแƒ“แƒแƒ•แƒแƒœแƒ˜ แƒ’แƒแƒœแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒ›แƒแƒ“แƒ”แƒšแƒ˜. แƒ›แƒแƒ’แƒ แƒแƒ› แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒ”แƒ›แƒ–แƒแƒ“แƒ”แƒ— แƒ›แƒแƒฃแƒšแƒแƒ“แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒกแƒแƒ“ แƒ•แƒ”แƒซแƒ”แƒ‘แƒ—?

แƒแƒ  แƒ•แƒ˜แƒชแƒ˜ แƒกแƒแƒ“ แƒแƒ แƒ˜แƒก แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜ แƒฌแƒ˜แƒ’แƒœแƒ˜แƒก แƒฉแƒ”แƒ›แƒ˜ แƒแƒกแƒšแƒ˜ "แƒฌแƒ˜แƒ’แƒœแƒ˜ แƒšแƒแƒ›แƒ”แƒ‘แƒ˜Unix 6-แƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒ™แƒแƒ“แƒ˜แƒ—, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒ“แƒšแƒแƒ‘แƒ Unix Heritage Society แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ›แƒแƒซแƒ”แƒ‘แƒœแƒแƒ— แƒแƒœแƒšแƒแƒ˜แƒœ แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ–แƒ” แƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒ™แƒแƒ“แƒ˜ Unix-แƒ˜แƒก แƒฃแƒคแƒ แƒ แƒซแƒ•แƒ”แƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒ˜แƒช แƒ™แƒ˜.

TUHS-แƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒ•แƒ”แƒ‘แƒจแƒ˜ แƒฎแƒ”แƒขแƒ˜แƒแƒšแƒ˜ แƒ›แƒฃแƒ–แƒ”แƒฃแƒ›แƒ˜แƒก แƒ›แƒแƒœแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒแƒก แƒฐแƒ’แƒแƒ•แƒก. แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒฉแƒ•แƒ”แƒœแƒก แƒกแƒแƒ”แƒ แƒ—แƒ แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒแƒก แƒ“แƒ แƒ›แƒ” แƒžแƒแƒขแƒ˜แƒ•แƒก แƒ•แƒชแƒ”แƒ› แƒ›แƒ แƒแƒ•แƒแƒšแƒฌแƒšแƒ˜แƒแƒœ แƒซแƒแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒก, แƒ แƒแƒ› แƒ”แƒก แƒ›แƒแƒกแƒแƒšแƒ แƒ”แƒขแƒแƒžแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“ แƒแƒฆแƒ•แƒแƒ“แƒ’แƒ˜แƒœแƒ แƒซแƒ•แƒ”แƒšแƒ˜ แƒคแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ“แƒ แƒแƒœแƒแƒ‘แƒ”แƒญแƒ“แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ. แƒ“แƒ แƒ›แƒ” แƒ™แƒแƒ แƒ’แƒแƒ“ แƒ•แƒ˜แƒชแƒ˜ แƒ˜แƒ› แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒแƒ™แƒšแƒ˜แƒ.

แƒ™แƒแƒœแƒ•แƒ”แƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒฃแƒซแƒ•แƒ”แƒšแƒ”แƒกแƒ˜ แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒฉแƒ•แƒ”แƒœแƒ˜ แƒชแƒœแƒแƒ‘แƒ˜แƒกแƒ›แƒแƒงแƒ•แƒแƒ แƒ”แƒแƒ‘แƒ˜แƒก แƒ“แƒแƒ™แƒ›แƒแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒจแƒ”แƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒ—แƒแƒœแƒแƒ›แƒ”แƒ“แƒ แƒแƒ•แƒ” แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ”แƒ‘แƒก.

แƒกแƒฎแƒ•แƒแƒ—แƒ แƒจแƒแƒ แƒ˜แƒก, pipe แƒชแƒฎแƒ แƒ˜แƒšแƒจแƒ˜ แƒแƒ แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒ˜ 42 sysent[]. แƒ“แƒแƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ?

แƒขแƒ แƒแƒ“แƒ˜แƒชแƒ˜แƒฃแƒšแƒ˜ Unix แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ”แƒ‘แƒ˜ (1970โ€“1974)

แƒ™แƒ•แƒแƒšแƒ˜ แƒ•แƒ”แƒ  แƒ•แƒ˜แƒžแƒแƒ•แƒ” pipe(2) แƒแƒ แƒช แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— PDP-7 Unix (1970 แƒฌแƒšแƒ˜แƒก แƒ˜แƒแƒœแƒ•แƒแƒ แƒ˜), แƒแƒ แƒช แƒฅ Unix-แƒ˜แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ (1971 แƒฌแƒšแƒ˜แƒก แƒœแƒแƒ”แƒ›แƒ‘แƒ”แƒ แƒ˜), แƒแƒ แƒช แƒแƒ แƒแƒกแƒ แƒฃแƒš แƒกแƒแƒฌแƒงแƒ˜แƒก แƒ™แƒแƒ“แƒจแƒ˜ แƒ›แƒ”แƒแƒ แƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ (1972 แƒฌแƒšแƒ˜แƒก แƒ˜แƒ•แƒœแƒ˜แƒกแƒ˜).

แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ TUHS แƒแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒก Unix-แƒ˜แƒก แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ (1973 แƒฌแƒšแƒ˜แƒก แƒ—แƒ”แƒ‘แƒ”แƒ แƒ•แƒแƒšแƒ˜) แƒ’แƒแƒฎแƒ“แƒ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒ™แƒแƒœแƒ•แƒ”แƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒ—:

Unix 1973rd Edition แƒ˜แƒงแƒ แƒ‘แƒแƒšแƒ แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒ— แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒแƒกแƒแƒ›แƒ‘แƒšแƒ”แƒ˜แƒก แƒ”แƒœแƒแƒ–แƒ”, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒกแƒ”แƒ•แƒ” แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. XNUMX แƒฌแƒ”แƒšแƒก แƒฉแƒแƒขแƒแƒ แƒ“แƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ˜แƒก แƒ’แƒแƒกแƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒšแƒแƒ“, แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜ แƒ’แƒแƒ“แƒแƒ˜แƒฌแƒ”แƒ แƒ”แƒก C-แƒ–แƒ” แƒ“แƒ แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ Unix-แƒ˜แƒก แƒ›แƒ”แƒแƒ—แƒฎแƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ.

แƒ”แƒ แƒ—แƒ›แƒ แƒ›แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒšแƒ›แƒ แƒ˜แƒžแƒแƒ•แƒ แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒ“แƒแƒ’ แƒ›แƒแƒ™แƒ˜แƒšแƒ แƒแƒ˜แƒ› แƒจแƒ”แƒกแƒ—แƒแƒ•แƒแƒ–แƒ แƒ˜แƒ“แƒ”แƒ "แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒ‘แƒแƒฆแƒ˜แƒก แƒจแƒšแƒแƒœแƒ’แƒ˜".

แƒ แƒแƒ’แƒแƒ  แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ”แƒ‘แƒ˜ Unix-แƒจแƒ˜
แƒ‘แƒ แƒแƒ˜แƒแƒœ แƒ™แƒ”แƒ แƒœแƒ˜แƒ’แƒแƒœแƒ˜แƒก แƒฌแƒ˜แƒ’แƒœแƒจแƒ˜Unix: แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ แƒ“แƒ แƒ›แƒ”แƒ›แƒฃแƒแƒ แƒ”แƒ‘แƒ˜"แƒ™แƒแƒœแƒ•แƒ”แƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒฉแƒ”แƒœแƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜ แƒ”แƒก แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒ˜แƒช แƒแƒ แƒ˜แƒก แƒœแƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ˜: "... แƒ˜แƒก แƒ™แƒ”แƒ“แƒ”แƒšแƒ–แƒ” แƒ”แƒ™แƒ˜แƒ“แƒ แƒฉแƒ”แƒ›แƒก แƒแƒคแƒ˜แƒกแƒจแƒ˜ Bell Labs-แƒจแƒ˜ 30 แƒฌแƒšแƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜." แฒแƒฅ แƒ˜แƒœแƒขแƒ”แƒ แƒ•แƒ˜แƒฃ แƒ›แƒแƒ™แƒ˜แƒšแƒ แƒแƒ˜แƒกแƒ—แƒแƒœแƒ“แƒ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒแƒ›แƒ‘แƒแƒ•แƒ˜ แƒ›แƒแƒ™แƒ˜แƒšแƒ แƒแƒ˜แƒก แƒœแƒแƒ›แƒฃแƒจแƒ”แƒ•แƒแƒ แƒ˜, แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ 2014 แƒฌแƒ”แƒšแƒก:

แƒ แƒแƒ“แƒ”แƒกแƒแƒช Unix แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒ“แƒ, แƒฉแƒ”แƒ›แƒ›แƒ แƒ’แƒแƒขแƒแƒชแƒ”แƒ‘แƒแƒ› แƒ™แƒแƒ แƒฃแƒขแƒ˜แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒ˜แƒ‘แƒ˜แƒซแƒ’แƒ, แƒ•แƒ—แƒฎแƒแƒ•แƒ” OS-แƒ˜แƒก แƒแƒ•แƒขแƒแƒ แƒก, แƒ™แƒ”แƒœ แƒขแƒแƒ›แƒžแƒกแƒแƒœแƒก, แƒ“แƒแƒฃแƒจแƒ•แƒแƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ–แƒ” แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ“แƒแƒกแƒฃแƒšแƒ˜แƒงแƒ แƒแƒ แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒแƒจแƒ˜, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒกแƒฎแƒ•แƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒ–แƒ”แƒช. แƒ™แƒ”แƒœแƒ›แƒ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ˜แƒขแƒ, แƒ แƒแƒ› แƒ”แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒงแƒ. แƒ—แƒฃแƒ›แƒชแƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒ˜แƒกแƒขแƒก, แƒ›แƒแƒก แƒกแƒฃแƒ แƒ“แƒ, แƒ แƒแƒ› แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒ แƒแƒšแƒ˜ แƒ”แƒ—แƒแƒ›แƒแƒจแƒ. แƒแƒ แƒ˜แƒก แƒ—แƒฃ แƒแƒ แƒ แƒฃแƒจแƒฃแƒแƒšแƒแƒ“ แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก แƒฉแƒแƒฌแƒ”แƒ แƒ แƒ›แƒแƒ แƒ—แƒšแƒแƒช แƒ“แƒ˜แƒ“แƒ˜ แƒฃแƒžแƒ˜แƒ แƒแƒขแƒ”แƒกแƒแƒ‘แƒ แƒจแƒฃแƒแƒšแƒ”แƒ“แƒฃแƒ  แƒคแƒแƒ˜แƒšแƒ–แƒ” แƒฉแƒแƒฌแƒ”แƒ แƒแƒกแƒ—แƒแƒœ แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒ—? แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒแƒจแƒ˜แƒœ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ›แƒ” แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ” แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒฌแƒ˜แƒœแƒแƒ“แƒแƒ“แƒ”แƒ‘แƒ แƒ›แƒ˜แƒ›แƒ–แƒ˜แƒ“แƒ•แƒ”แƒšแƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒ— โ€žpipelineโ€œ แƒ“แƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒแƒ‘แƒ˜แƒ—, แƒ™แƒ”แƒœแƒ›แƒ แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“ แƒฌแƒแƒ›แƒแƒ˜แƒซแƒแƒฎแƒ: โ€žแƒ›แƒ” แƒแƒ›แƒแƒก แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ‘!โ€œ

แƒ“แƒ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ. แƒ”แƒ แƒ— แƒกแƒแƒ‘แƒ”แƒ“แƒ˜แƒกแƒฌแƒ”แƒ แƒ แƒกแƒแƒฆแƒแƒ›แƒแƒก, แƒ™แƒ”แƒœแƒ›แƒ แƒจแƒ”แƒชแƒ•แƒแƒšแƒ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜ แƒ“แƒ แƒญแƒฃแƒ แƒ•แƒ˜, แƒ“แƒแƒแƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ, แƒ แƒแƒ—แƒ แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜แƒงแƒ, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒก แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒก (แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒ“แƒแƒœ) แƒ“แƒ แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒชแƒ•แƒแƒšแƒ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜. แƒ›แƒ”แƒแƒ แƒ” แƒ“แƒฆแƒ”แƒก, แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ”แƒ‘แƒ›แƒ แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒคแƒแƒ แƒ—แƒแƒ“ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒจแƒ˜. แƒ™แƒ•แƒ˜แƒ แƒ˜แƒก แƒ‘แƒแƒšแƒแƒก แƒ›แƒ“แƒ˜แƒ•แƒœแƒ”แƒ‘แƒ˜ แƒ›แƒแƒ— แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ“แƒœแƒ”แƒœ แƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒก แƒ’แƒแƒ“แƒแƒ›แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ”แƒšแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒžแƒ แƒ˜แƒœแƒขแƒ”แƒ แƒจแƒ˜ แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒ“. แƒชแƒแƒขแƒ แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ™แƒ”แƒœแƒ›แƒ แƒจแƒ”แƒชแƒ•แƒแƒšแƒ แƒแƒ แƒ˜แƒ’แƒ˜แƒœแƒแƒšแƒฃแƒ แƒ˜ API แƒ“แƒ แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒ˜ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒฃแƒคแƒ แƒ แƒกแƒฃแƒคแƒ—แƒ แƒ™แƒแƒœแƒ•แƒ”แƒœแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ“แƒ.

แƒกแƒแƒ›แƒฌแƒฃแƒฎแƒแƒ แƒแƒ“, แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ˜แƒก Unix แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒ™แƒแƒ“แƒ˜ แƒ“แƒแƒ˜แƒ™แƒแƒ แƒ’แƒ. แƒ“แƒ แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒ™แƒแƒ“แƒ˜ แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ C แƒ›แƒ”แƒแƒ—แƒฎแƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒแƒ’แƒแƒ›แƒแƒ•แƒ˜แƒ“แƒ 1973 แƒฌแƒšแƒ˜แƒก แƒœแƒแƒ”แƒ›แƒ‘แƒ”แƒ แƒจแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒ“แƒ แƒแƒคแƒ˜แƒชแƒ˜แƒแƒšแƒฃแƒ  แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒแƒ›แƒ“แƒ” แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ—แƒ•แƒ˜แƒ— แƒแƒ“แƒ แƒ” แƒ“แƒ แƒแƒ  แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒแƒก. แƒกแƒ˜แƒ แƒชแƒฎแƒ•แƒ˜แƒšแƒ˜แƒ, แƒ แƒแƒ› แƒแƒ› แƒšแƒ”แƒ’แƒ”แƒœแƒ“แƒแƒ แƒฃแƒšแƒ˜ Unix แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒ™แƒแƒ“แƒ˜ แƒ“แƒแƒ˜แƒ™แƒแƒ แƒ’แƒ, แƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ แƒกแƒแƒ›แƒฃแƒ“แƒแƒ›แƒแƒ“.

แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒขแƒ”แƒฅแƒกแƒขแƒฃแƒ แƒ˜ แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ pipe(2) แƒแƒ แƒ˜แƒ•แƒ” แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ, แƒแƒกแƒ” แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒ˜แƒฌแƒงแƒแƒ— แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ˜แƒก แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒ— แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ (แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒฎแƒแƒ–แƒ’แƒแƒกแƒ›แƒฃแƒšแƒ˜แƒ โ€žแƒฎแƒ”แƒšแƒ˜แƒ—โ€œ, แƒšแƒ˜แƒขแƒ”แƒ แƒแƒชแƒ˜แƒฃแƒšแƒ˜ แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜ ^H, แƒ แƒแƒกแƒแƒช แƒ›แƒแƒฐแƒงแƒ•แƒ”แƒ‘แƒ แƒฅแƒ•แƒ”แƒ“แƒ แƒฎแƒแƒ–แƒ˜!). แƒ”แƒก แƒžแƒ แƒแƒขแƒ-pipe(2) แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ แƒแƒกแƒแƒ›แƒ‘แƒšแƒ”แƒ˜แƒก แƒ”แƒœแƒแƒ–แƒ” แƒ“แƒ แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฃแƒ™แƒ•แƒ” แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒ›แƒแƒกแƒแƒšแƒแƒ“แƒœแƒ”แƒš แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒแƒก:

แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜ แƒ›แƒ˜แƒšแƒ˜ แƒฅแƒ›แƒœแƒ˜แƒก แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒก/แƒ’แƒแƒ›แƒแƒกแƒ•แƒšแƒ˜แƒก แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒก, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ”แƒฌแƒแƒ“แƒ”แƒ‘แƒ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜. แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒแƒฆแƒ›แƒฌแƒ”แƒ แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒแƒก แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒกแƒ แƒ“แƒ แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ แƒแƒฆแƒแƒช แƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒจแƒ˜, 504 แƒ‘แƒแƒ˜แƒขแƒแƒ›แƒ“แƒ” แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ˜ แƒ‘แƒฃแƒคแƒ”แƒ แƒ“แƒ”แƒ‘แƒ, แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒแƒช แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒฉแƒ”แƒ แƒ“แƒ”แƒ‘แƒ. แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒ“แƒแƒœ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒกแƒแƒก แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ.

แƒ›แƒแƒ›แƒ“แƒ”แƒ•แƒœแƒ แƒฌแƒ”แƒšแƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜ แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ˜แƒงแƒ C-แƒจแƒ˜ แƒ“แƒ แƒ›แƒ˜แƒšแƒ˜(2) แƒ›แƒ”แƒแƒ—แƒฎแƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒแƒจแƒ˜ แƒจแƒ”แƒ˜แƒซแƒ˜แƒœแƒ แƒ—แƒแƒ•แƒ˜แƒกแƒ˜ แƒ—แƒแƒœแƒแƒ›แƒ”แƒ“แƒ แƒแƒ•แƒ” แƒ’แƒแƒ แƒ”แƒ’แƒœแƒแƒ‘แƒ แƒžแƒ แƒแƒขแƒแƒขแƒ˜แƒžแƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“"pipe(fildes)"

แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜ แƒ›แƒ˜แƒšแƒ˜ แƒฅแƒ›แƒœแƒ˜แƒก แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒก/แƒ’แƒแƒ›แƒแƒกแƒ•แƒšแƒ˜แƒก แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒก, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ”แƒฌแƒแƒ“แƒ”แƒ‘แƒ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜. แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒฅแƒœแƒแƒก แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒกแƒ แƒ“แƒ แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒจแƒ˜. แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ แƒแƒฆแƒแƒช แƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒจแƒ˜, แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ r1-แƒจแƒ˜ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒฃแƒ แƒ˜ (resp. fildes[1]), แƒ‘แƒฃแƒคแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ 4096 แƒ‘แƒแƒ˜แƒขแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒแƒช แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒจแƒ”แƒฉแƒ”แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ. แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒ“แƒแƒœ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒกแƒแƒก, r0-แƒ–แƒ” แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒฃแƒ แƒ˜ (resp. fildes[0]) แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก.

แƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ‘แƒ”แƒœ, แƒ แƒแƒ› แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒแƒ แƒ˜ (แƒแƒœ แƒ›แƒ”แƒขแƒ˜) แƒกแƒแƒ™แƒแƒ›แƒฃแƒœแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ (แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜ แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒ— แƒฉแƒแƒœแƒ’แƒแƒšแƒ˜) แƒ’แƒแƒ“แƒแƒกแƒชแƒ”แƒ›แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒ“แƒแƒœ แƒ–แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒ˜ ะธ แƒ“แƒแƒฌแƒ”แƒ แƒ.

แƒ’แƒแƒ แƒกแƒก แƒแƒฅแƒ•แƒก แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒ˜ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒ˜แƒก แƒฎแƒแƒ–แƒแƒ•แƒแƒœแƒ˜ แƒ›แƒแƒกแƒ˜แƒ•แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒ–แƒแƒ แƒ”แƒ‘แƒ˜ แƒชแƒแƒ แƒ˜แƒ”แƒšแƒ˜ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒ“แƒแƒœ (แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ  แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒš แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก), แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒฅแƒ•แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒ‘แƒแƒšแƒ (แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒแƒฆแƒ›แƒฌแƒ”แƒ แƒ˜ แƒ“แƒแƒฎแƒฃแƒ แƒฃแƒšแƒ˜แƒ) แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก "แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ“แƒแƒกแƒแƒกแƒ แƒฃแƒšแƒก". แƒ›แƒกแƒ’แƒแƒ•แƒก แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒแƒจแƒ˜ แƒฌแƒ”แƒ แƒ˜แƒก แƒ›แƒแƒฌแƒแƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ˜แƒ’แƒœแƒแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ.

แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒแƒ“แƒ แƒ”แƒฃแƒšแƒ˜ แƒจแƒ”แƒ›แƒแƒœแƒแƒฎแƒฃแƒšแƒ˜ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒก แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒจแƒคแƒแƒ—แƒ”แƒ‘แƒ Unix-แƒ˜แƒก แƒ›แƒ”แƒฎแƒฃแƒ—แƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒแƒ›แƒ“แƒ” (1974 แƒฌแƒšแƒ˜แƒก แƒ˜แƒ•แƒœแƒ˜แƒกแƒ˜), แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒก แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒฃแƒ แƒ˜แƒ, แƒ แƒแƒช แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒแƒจแƒ˜. แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ”แƒ‘แƒ˜ แƒแƒฎแƒšแƒแƒฎแƒแƒœ แƒ“แƒแƒ”แƒ›แƒแƒขแƒ, แƒแƒกแƒ” แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒขแƒแƒ•แƒแƒ— แƒ›แƒ”แƒฎแƒฃแƒ—แƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ.

Unix-แƒ˜แƒก แƒ›แƒ”แƒ”แƒฅแƒ•แƒกแƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ (1975)

แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒแƒ— Unix แƒ™แƒแƒ“แƒ˜แƒก แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ แƒ›แƒ”แƒ”แƒฅแƒ•แƒกแƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ (1975 แƒฌแƒšแƒ˜แƒก แƒ›แƒแƒ˜แƒกแƒ˜). แƒ“แƒ˜แƒ“แƒฌแƒ˜แƒšแƒแƒ“ แƒ›แƒแƒ“แƒšแƒแƒ‘แƒ แƒšแƒแƒ›แƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒกแƒ˜ แƒžแƒแƒ•แƒœแƒ แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒ˜แƒ, แƒ•แƒ˜แƒ“แƒ แƒ” แƒแƒ“แƒ แƒ˜แƒœแƒ“แƒ”แƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒ”แƒ‘แƒ˜:

แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒฌแƒšแƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒฌแƒ˜แƒ’แƒœแƒ˜ แƒšแƒแƒ›แƒ”แƒ‘แƒ˜ แƒ˜แƒงแƒ แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ—แƒ˜ แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ Unix-แƒ˜แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ–แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ แƒ˜แƒงแƒ Bell Labs-แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ—. แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› แƒ›แƒ”แƒ”แƒฅแƒ•แƒกแƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ˜แƒก แƒšแƒ˜แƒชแƒ”แƒœแƒ–แƒ˜แƒแƒ› แƒ›แƒแƒกแƒฌแƒแƒ•แƒšแƒ”แƒ‘แƒšแƒ”แƒ‘แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ แƒ›แƒ˜แƒกแƒชแƒ แƒ’แƒแƒ›แƒแƒ”แƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒœแƒแƒ— แƒ›แƒ˜แƒกแƒ˜ แƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒ™แƒแƒ“แƒ˜, แƒ›แƒ”แƒจแƒ•แƒ˜แƒ“แƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ˜แƒก แƒšแƒ˜แƒชแƒ”แƒœแƒ–แƒ˜แƒ แƒ’แƒแƒ›แƒแƒ แƒ˜แƒชแƒฎแƒแƒ•แƒ“แƒ แƒแƒ› แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒแƒก, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒฌแƒ˜แƒ’แƒœแƒ˜ แƒ’แƒแƒ•แƒ แƒชแƒ”แƒšแƒ“แƒ แƒฃแƒ™แƒแƒœแƒแƒœแƒ แƒกแƒแƒ‘แƒ”แƒญแƒ“แƒ˜ แƒแƒกแƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ—.

แƒ“แƒฆแƒ”แƒก แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒจแƒ”แƒ˜แƒซแƒ˜แƒœแƒแƒ— แƒฌแƒ˜แƒ’แƒœแƒ˜แƒก แƒฎแƒ”แƒšแƒแƒฎแƒแƒšแƒ˜ แƒ‘แƒ”แƒญแƒ“แƒ•แƒ, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ™แƒแƒœแƒ–แƒ” แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ˜แƒ แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒแƒกแƒšแƒ˜แƒก แƒแƒžแƒแƒ แƒแƒขแƒจแƒ˜. แƒ“แƒ Warren Toomey-แƒ˜แƒก แƒฌแƒงแƒแƒšแƒแƒ‘แƒ˜แƒ— (แƒ แƒแƒ›แƒ”แƒšแƒ›แƒแƒช แƒ“แƒแƒ˜แƒฌแƒงแƒ TUHS แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜) แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ— PDF แƒคแƒแƒ˜แƒšแƒ˜ แƒ›แƒ”แƒ”แƒฅแƒ•แƒกแƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒ™แƒแƒ“แƒ˜แƒ—. แƒ›แƒ˜แƒœแƒ“แƒ แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ แƒ›แƒแƒ’แƒชแƒ”แƒ— แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ—แƒฃ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜ แƒซแƒแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ แƒ“แƒแƒ˜แƒฎแƒแƒ แƒฏแƒ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“:

15 แƒฌแƒ”แƒšแƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒฎแƒœแƒ˜แƒก แƒฌแƒ˜แƒœ, แƒ›แƒ” แƒแƒ•แƒ™แƒ แƒ˜แƒคแƒ” แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒฌแƒงแƒแƒ แƒแƒก แƒ™แƒแƒ“แƒ˜แƒก แƒแƒกแƒšแƒ˜ แƒšแƒแƒ›แƒ”แƒ‘แƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒแƒ  แƒ›แƒแƒ›แƒ”แƒฌแƒแƒœแƒ แƒฉแƒ”แƒ›แƒ˜ แƒแƒกแƒšแƒ˜แƒก แƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ˜ แƒกแƒฎแƒ•แƒ แƒแƒกแƒšแƒ”แƒ‘แƒ˜แƒก แƒฃแƒชแƒœแƒแƒ‘แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒกแƒ’แƒแƒœ. TUHS แƒฏแƒ”แƒ  แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ“แƒ แƒ“แƒ แƒ›แƒ” แƒแƒ  แƒ›แƒฅแƒแƒœแƒ“แƒ แƒฌแƒ•แƒ“แƒแƒ›แƒ แƒซแƒ•แƒ”แƒš แƒฌแƒงแƒแƒ แƒแƒ”แƒ‘แƒ–แƒ”. แƒ›แƒแƒ’แƒ แƒแƒ› 1988 แƒฌแƒ”แƒšแƒก แƒ›แƒ” แƒ•แƒ˜แƒžแƒแƒ•แƒ” แƒซแƒ•แƒ”แƒšแƒ˜ 9-แƒขแƒ แƒ”แƒ™แƒ˜แƒแƒœแƒ˜ แƒšแƒ”แƒœแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒ“แƒ แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒก PDP11 แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒ˜แƒ“แƒแƒœ. แƒซแƒœแƒ”แƒšแƒ˜ แƒ˜แƒงแƒ แƒ˜แƒ›แƒ˜แƒก แƒ“แƒแƒ“แƒ’แƒ”แƒœแƒ, แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ“แƒ แƒ—แƒฃ แƒแƒ แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒงแƒ แƒฎแƒ”แƒšแƒฃแƒฎแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ /usr/src/ แƒฎแƒ”, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒฃแƒ›แƒ”แƒขแƒ”แƒกแƒแƒ‘แƒแƒก แƒ”แƒฌแƒ”แƒ แƒ 1979 แƒฌแƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒจแƒ˜แƒœแƒแƒช แƒซแƒ•แƒ”แƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒแƒ“แƒ. แƒ”แƒก แƒ˜แƒงแƒ แƒ›แƒ”แƒจแƒ•แƒ˜แƒ“แƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ แƒแƒœ แƒ›แƒ˜แƒกแƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒฃแƒšแƒ˜ PWB, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒ” แƒ›แƒฏแƒ”แƒ แƒแƒ“แƒ.

แƒ›แƒ” แƒแƒ•แƒ˜แƒฆแƒ” แƒแƒฆแƒ›แƒแƒฉแƒ”แƒœแƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ˜ แƒ“แƒ แƒฎแƒ”แƒšแƒ˜แƒ— แƒฉแƒแƒ•แƒแƒกแƒฌแƒแƒ แƒ” แƒฌแƒงแƒแƒ แƒแƒ”แƒ‘แƒ˜ แƒ›แƒ”แƒ”แƒฅแƒ•แƒกแƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒแƒจแƒ˜. แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒ™แƒแƒ“แƒ˜ แƒฃแƒชแƒ•แƒšแƒ”แƒšแƒ˜ แƒ“แƒแƒ แƒฉแƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜แƒก แƒแƒ“แƒœแƒแƒ• แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ, แƒ—แƒแƒœแƒแƒ›แƒ”แƒ“แƒ แƒแƒ•แƒ” += แƒŸแƒ”แƒขแƒแƒœแƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ แƒ›แƒแƒซแƒ•แƒ”แƒšแƒ”แƒ‘แƒฃแƒš =+-แƒ–แƒ”. แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒ แƒแƒ› แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฌแƒแƒ˜แƒจแƒแƒšแƒ, แƒ–แƒแƒ’แƒ˜ แƒ™แƒ˜ แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒแƒ“ แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ˜แƒงแƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒช แƒ˜แƒกแƒ” แƒ‘แƒ”แƒ•แƒ แƒ˜.

แƒ“แƒ แƒ“แƒฆแƒ”แƒก แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒฌแƒแƒ•แƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ— แƒแƒœแƒšแƒแƒ˜แƒœ TUHS-แƒ–แƒ” แƒ›แƒ”แƒ”แƒฅแƒ•แƒกแƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒ™แƒแƒ“แƒ˜ แƒแƒ แƒฅแƒ˜แƒ•แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ–แƒ”แƒช แƒ“แƒ”แƒœแƒ˜แƒก แƒ แƒ˜แƒฉแƒ˜แƒก แƒฎแƒ”แƒšแƒ˜ แƒ”แƒญแƒ˜แƒ แƒ.

แƒกแƒฎแƒ•แƒแƒ—แƒ แƒจแƒแƒ แƒ˜แƒก, แƒ”แƒ แƒ—แƒ˜ แƒจแƒ”แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—, C-แƒ™แƒแƒ“แƒ˜แƒก แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ™แƒ”แƒ แƒœแƒ˜แƒ’แƒแƒœแƒ˜แƒกแƒ แƒ“แƒ แƒ แƒ˜แƒฉแƒ˜แƒก แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒแƒ›แƒ“แƒ” แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒแƒ™แƒšแƒ”แƒ“. แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒแƒ  แƒจแƒ”แƒ›แƒ˜แƒซแƒšแƒ˜แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒฉแƒแƒกแƒ›แƒ แƒ•แƒ แƒชแƒ”แƒšแƒ˜ แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”, แƒ แƒแƒ—แƒ แƒ›แƒแƒ”แƒ แƒ’แƒแƒก แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒ•แƒ˜แƒฌแƒ แƒ แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒ”แƒแƒšแƒก แƒฉแƒ”แƒ›แƒก แƒกแƒแƒ˜แƒขแƒ–แƒ”.

แƒแƒ“แƒ แƒ”แƒฃแƒšแƒ˜ /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 แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒก, แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒจแƒ”แƒ”แƒกแƒแƒ‘แƒแƒ›แƒ”แƒ‘แƒ inode flag 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 แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก uยป แƒ“แƒ แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ“แƒ”แƒ‘แƒ R0 ะธ R1 แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒ–แƒแƒ แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜แƒ.

แƒ›แƒแƒ“แƒ˜แƒ— แƒ•แƒชแƒแƒ“แƒแƒ— ialloc() แƒ“แƒ˜แƒกแƒ™แƒ–แƒ” แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ˜แƒœแƒแƒ“แƒฃแƒ แƒ˜ (แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒฃแƒ แƒ˜)แƒ“แƒ แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒ— falloc () - แƒ›แƒแƒแƒ—แƒแƒ•แƒกแƒ”แƒ— แƒแƒ แƒ˜ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜. แƒ—แƒฃ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ™แƒแƒ แƒ’แƒแƒ“ แƒฌแƒแƒ•แƒ, แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒ“แƒ แƒแƒจแƒ”แƒ‘แƒก แƒแƒ› แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒชแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒก แƒแƒ แƒ˜ แƒ‘แƒแƒšแƒ, แƒ›แƒ˜แƒ•แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ— แƒ›แƒแƒ— แƒ˜แƒ›แƒแƒ•แƒ” แƒ˜แƒœแƒแƒ“แƒ–แƒ” (แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ แƒ“แƒแƒงแƒ”แƒœแƒ“แƒ”แƒ‘แƒ 2-แƒ–แƒ”) แƒ“แƒ แƒ›แƒแƒ•แƒœแƒ˜แƒจแƒœแƒแƒ•แƒ— แƒ˜แƒœแƒแƒ“แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒš แƒ“แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒจแƒ˜. แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ แƒ›แƒ˜แƒแƒฅแƒชแƒ˜แƒ”แƒ— แƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒก แƒ“แƒแƒ•แƒ“แƒ”() แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒ˜แƒšแƒ˜แƒ™แƒ”แƒ‘แƒจแƒ˜, แƒ แƒแƒ—แƒ แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ“แƒ”แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ แƒแƒฎแƒแƒš แƒ˜แƒœแƒแƒ“แƒจแƒ˜.

pipe() แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ˜แƒแƒ แƒแƒก R0 ะธ R1 แƒ“แƒแƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ— แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒก แƒœแƒแƒ›แƒ แƒ”แƒ‘แƒ˜ แƒฌแƒแƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒแƒ“ แƒ“แƒ แƒฉแƒแƒกแƒแƒฌแƒ”แƒ แƒแƒ“. falloc() แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒก แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒจแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒกแƒ”แƒ•แƒ” "แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก" แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— u.u_ar0[R0] แƒ“แƒ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒแƒฆแƒ›แƒฌแƒ”แƒ แƒ˜. แƒแƒœแƒฃ แƒ™แƒแƒ“แƒ˜ แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ r แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ“แƒ”แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒแƒ แƒ˜ แƒฌแƒแƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒแƒ“ แƒ“แƒ แƒแƒœแƒ˜แƒญแƒ”แƒ‘แƒก แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒก แƒฃแƒจแƒฃแƒแƒšแƒแƒ“ แƒฌแƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก u.u_ar0[R0] แƒ›แƒ”แƒแƒ แƒ” แƒ–แƒแƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ falloc().

แƒ“แƒ แƒแƒจแƒ FPIPE, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒแƒก, แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ‘แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒฅแƒชแƒ”แƒ•แƒแƒก rdwr() 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).

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ— inode แƒกแƒแƒชแƒœแƒแƒ‘แƒแƒ แƒ แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒก. แƒกแƒแƒœแƒแƒ› แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒก แƒแƒ แƒ˜แƒ•แƒ” แƒ‘แƒแƒšแƒ แƒ แƒฉแƒ”แƒ‘แƒ แƒฆแƒ˜แƒ, แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก 2-แƒ˜แƒก แƒขแƒแƒšแƒ˜. แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒขแƒแƒ แƒ”แƒ‘แƒ— แƒ”แƒ แƒ— แƒ‘แƒ›แƒฃแƒšแƒก ( rp->f_inode), แƒแƒกแƒ” แƒ แƒแƒ›, แƒ—แƒฃ แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ˜ 2-แƒ–แƒ” แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒ˜แƒ, แƒ”แƒก แƒฃแƒœแƒ“แƒ แƒœแƒ˜แƒจแƒœแƒแƒ•แƒ“แƒ”แƒก, แƒ แƒแƒ› แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ›แƒ แƒ“แƒแƒฎแƒฃแƒ แƒ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒก แƒ‘แƒแƒšแƒ. แƒกแƒฎแƒ•แƒ แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜แƒ— แƒ แƒแƒ› แƒ•แƒ—แƒฅแƒ•แƒแƒ—, แƒฉแƒ•แƒ”แƒœ แƒ•แƒชแƒ“แƒ˜แƒšแƒแƒ‘แƒ— แƒฉแƒแƒ•แƒฌแƒ”แƒ แƒแƒ— แƒ“แƒแƒฎแƒฃแƒ แƒฃแƒš แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ–แƒ” แƒ“แƒ แƒ”แƒก แƒแƒ แƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ. แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ™แƒแƒ“แƒ˜ EPIPE แƒ“แƒ แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜ SIGPIPE แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ Unix-แƒ˜แƒก แƒ›แƒ”แƒ”แƒฅแƒ•แƒกแƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒแƒจแƒ˜.

แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒจแƒ˜แƒœแƒแƒช แƒ™แƒ˜, แƒ—แƒฃ แƒ™แƒแƒœแƒ•แƒ”แƒ˜แƒ”แƒ แƒ˜ แƒฆแƒ˜แƒแƒ, แƒ˜แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒกแƒแƒ•แƒกแƒ” แƒ˜แƒงแƒแƒก. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒšแƒ”แƒ‘แƒ— แƒกแƒแƒ™แƒ”แƒขแƒก แƒ“แƒ แƒ•แƒ˜แƒซแƒ˜แƒœแƒ”แƒ‘แƒ— แƒ˜แƒ› แƒ˜แƒ›แƒ”แƒ“แƒ˜แƒ—, แƒ แƒแƒ› แƒกแƒฎแƒ•แƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒ“แƒแƒœ แƒ“แƒ แƒ’แƒแƒแƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒšแƒ”แƒ‘แƒก แƒ›แƒแƒกแƒจแƒ˜ แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒก แƒแƒ“แƒ’แƒ˜แƒšแƒก. แƒ’แƒแƒฆแƒ•แƒ˜แƒซแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ•แƒฃแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ˜แƒ— แƒกแƒแƒฌแƒงแƒ˜แƒกแƒก, แƒ˜แƒกแƒ”แƒ• แƒ•แƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ— แƒกแƒแƒ™แƒ”แƒขแƒก แƒ“แƒ แƒ•แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ— แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒแƒฎแƒแƒš แƒชแƒ˜แƒ™แƒšแƒก.

แƒ—แƒฃ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒจแƒ˜ แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒแƒšแƒ˜ แƒแƒ“แƒ’แƒ˜แƒšแƒ˜แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒ›แƒแƒกแƒจแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒ•แƒฌแƒ”แƒ แƒ— writei ()... แฒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜ 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);
}

แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ’แƒ˜แƒแƒ“แƒ•แƒ˜แƒšแƒ“แƒ”แƒ— แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ แƒฅแƒ•แƒ”แƒ›แƒแƒ“แƒแƒœ แƒ–แƒ”แƒ•แƒ˜แƒ—. "แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒ“แƒ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ˜แƒก" แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜ แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ›แƒแƒจแƒ˜แƒœ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒจแƒ˜. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— Readi () แƒฉแƒ•แƒ”แƒœ แƒ•แƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒ— แƒ˜แƒ›แƒ“แƒ”แƒœ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒก, แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒช แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ“แƒแƒœ f_offset แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒœแƒแƒแƒฎแƒšแƒ”แƒ— แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒแƒคแƒกแƒ”แƒขแƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ.

แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒกแƒแƒก, แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜ แƒชแƒแƒ แƒ˜แƒ”แƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ, แƒ—แƒฃ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒแƒคแƒกแƒ”แƒขแƒ˜ แƒ›แƒ˜แƒฆแƒฌแƒ”แƒฃแƒšแƒ˜แƒ i_size1 แƒ˜แƒœแƒแƒ“แƒจแƒ˜. แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ— แƒžแƒแƒ–แƒ˜แƒชแƒ˜แƒแƒก 0-แƒ–แƒ” แƒ“แƒ แƒ•แƒชแƒ“แƒ˜แƒšแƒแƒ‘แƒ— แƒ’แƒแƒ•แƒแƒฆแƒ•แƒ˜แƒซแƒแƒ— แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒกแƒฃแƒ แƒก แƒฉแƒแƒ˜แƒฌแƒ”แƒ แƒแƒก แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒจแƒ˜. แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒชแƒ˜แƒ—, แƒ แƒแƒ› แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ™แƒแƒœแƒ•แƒ”แƒ˜แƒ”แƒ แƒ˜ แƒกแƒแƒ•แƒกแƒ”แƒ, writep() แƒ“แƒแƒ˜แƒซแƒ˜แƒœแƒ”แƒ‘แƒก ip+1. แƒ“แƒ แƒแƒฎแƒšแƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜ แƒชแƒแƒ แƒ˜แƒ”แƒšแƒ˜แƒ, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒ•แƒแƒฆแƒ•แƒ˜แƒซแƒแƒ— แƒ˜แƒก, แƒ แƒแƒ› แƒ’แƒแƒœแƒแƒแƒฎแƒšแƒแƒœ แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒชแƒ˜แƒ™แƒšแƒ˜.

แƒ—แƒฃ แƒฌแƒแƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ˜ แƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒ’แƒแƒฅแƒ•แƒ—, แƒ›แƒแƒจแƒ˜แƒœ readp() แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ“แƒ แƒแƒจแƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ IREAD แƒ“แƒ แƒ“แƒแƒ˜แƒซแƒ˜แƒœแƒ” ip+2. แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒชแƒ˜แƒ—, แƒ แƒ แƒ’แƒแƒแƒฆแƒ•แƒ˜แƒซแƒ”แƒ‘แƒก แƒ›แƒแƒก writep(), แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ˜แƒก แƒฌแƒ”แƒ แƒก แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒก แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒจแƒ˜.

แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ”แƒ‘แƒ˜ readi() แƒ“แƒ 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() แƒ’แƒแƒœแƒแƒแƒฎแƒšแƒ”แƒ‘แƒก แƒชแƒ˜แƒ™แƒšแƒก.

แƒ”แƒก แƒแƒ•แƒกแƒ”แƒ‘แƒก แƒ™แƒแƒœแƒ•แƒ”แƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒแƒก แƒ›แƒ”แƒ”แƒฅแƒ•แƒกแƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒแƒจแƒ˜. แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ™แƒแƒ“แƒ˜, แƒจแƒแƒ แƒกแƒ›แƒ˜แƒ›แƒแƒ•แƒแƒšแƒ˜ แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜.

Unix-แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ˜แƒ“แƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ (1979 แƒฌแƒšแƒ˜แƒก แƒ˜แƒแƒœแƒ•แƒแƒ แƒ˜) แƒ˜แƒงแƒ แƒแƒฎแƒแƒšแƒ˜ แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ (แƒแƒ—แƒฎแƒ˜ แƒฌแƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’), แƒ แƒแƒ›แƒ”แƒšแƒ›แƒแƒช แƒจแƒ”แƒ›แƒแƒ˜แƒขแƒแƒœแƒ แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒแƒฎแƒแƒšแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒ“แƒ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ. แƒ›แƒแƒœ แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒแƒœแƒ˜แƒชแƒแƒ“แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ”แƒ‘แƒ˜แƒก แƒขแƒ˜แƒžแƒ˜แƒก แƒฉแƒแƒ›แƒแƒกแƒฎแƒ›แƒ˜แƒก, แƒ’แƒแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒแƒ™แƒ แƒ”แƒคแƒ˜แƒšแƒ˜ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒกแƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ—. แƒ—แƒฃแƒ›แƒชแƒ แƒ™แƒแƒœแƒ•แƒ”แƒ˜แƒ”แƒ แƒ˜แƒก แƒ™แƒแƒ“แƒ˜ แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒฃแƒšแƒแƒ“ แƒฃแƒชแƒ•แƒšแƒ”แƒšแƒ˜. แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒ›แƒแƒ•แƒขแƒแƒ•แƒแƒ— แƒ”แƒก แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ.

Xv6, แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ Unix-แƒ˜แƒก แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜

แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“ Xv6 Unix-แƒ˜แƒก แƒ›แƒ”แƒ”แƒฅแƒ•แƒกแƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ˜แƒก แƒ’แƒแƒ•แƒšแƒ”แƒœแƒ˜แƒก แƒฅแƒ•แƒ”แƒจ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ แƒ—แƒแƒœแƒแƒ›แƒ”แƒ“แƒ แƒแƒ•แƒ” C-แƒ–แƒ”, แƒ แƒแƒ› แƒ˜แƒ›แƒฃแƒจแƒแƒแƒก x86 แƒžแƒ แƒแƒชแƒ”แƒกแƒแƒ แƒ”แƒ‘แƒ–แƒ”. แƒ™แƒแƒ“แƒ˜ แƒแƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒฌแƒแƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ˜ แƒ“แƒ แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒ˜แƒ. แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, Unix-แƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ˜แƒ— TUHS-แƒ˜แƒ—, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒจแƒ”แƒแƒ“แƒ’แƒ˜แƒœแƒแƒ— แƒ˜แƒ’แƒ˜, แƒจแƒ”แƒชแƒ•แƒแƒšแƒแƒ— แƒ“แƒ แƒ’แƒแƒฃแƒจแƒ•แƒแƒ— แƒกแƒฎแƒ•แƒ แƒ แƒแƒ›แƒ”แƒ–แƒ”, แƒ’แƒแƒ แƒ“แƒ 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. แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ— แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ— แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ™แƒแƒ“แƒ˜. แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ” แƒ›แƒ”แƒ”แƒฅแƒ•แƒกแƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒ™แƒแƒ“แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ–แƒ”แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ˜แƒกแƒ˜ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒ˜ แƒ“แƒ แƒกแƒแƒกแƒ˜แƒแƒ›แƒแƒ•แƒœแƒแƒ.

Linux 0.01

Linux 0.01 แƒฌแƒงแƒแƒ แƒแƒก แƒ™แƒแƒ“แƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒฎแƒ˜แƒšแƒแƒ—. แƒกแƒแƒกแƒฌแƒแƒ•แƒšแƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ แƒ›แƒ˜แƒก fs/pipe.c. แƒ”แƒก แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ˜แƒœแƒแƒ“แƒก แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒกแƒแƒ“แƒ’แƒ”แƒœแƒแƒ“, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ—แƒแƒ•แƒแƒ“ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜ แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ แƒ—แƒแƒœแƒแƒ›แƒ”แƒ“แƒ แƒแƒ•แƒ” C-แƒจแƒ˜. แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒแƒ˜แƒแƒ แƒ”แƒ— แƒ›แƒ”-6 แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ˜แƒก แƒ™แƒแƒ“แƒ˜, แƒแƒฅ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒแƒ  แƒ’แƒ”แƒฅแƒœแƒ”แƒ‘แƒแƒ—. แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ write_pipe():

int write_pipe(struct m_inode * inode, char * buf, int count)
{
    char * b=buf;

    wake_up(&inode->i_wait);
    if (inode->i_count != 2) { /* no readers */
        current->signal |= (1<<(SIGPIPE-1));
        return -1;
    }
    while (count-->0) {
        while (PIPE_FULL(*inode)) {
            wake_up(&inode->i_wait);
            if (inode->i_count != 2) {
                current->signal |= (1<<(SIGPIPE-1));
                return b-buf;
            }
            sleep_on(&inode->i_wait);
        }
        ((char *)inode->i_size)[PIPE_HEAD(*inode)] =
            get_fs_byte(b++);
        INC_PIPE( PIPE_HEAD(*inode) );
        wake_up(&inode->i_wait);
    }
    wake_up(&inode->i_wait);
    return b-buf;
}

แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ แƒขแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”แƒช แƒ™แƒ˜, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒแƒ แƒ™แƒ•แƒ˜แƒแƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ˜แƒœแƒแƒ“แƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ, แƒ แƒแƒ—แƒ แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒแƒ—, แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜แƒ แƒ—แƒฃ แƒแƒ แƒ แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ SIGPIPE. แƒ‘แƒแƒ˜แƒขแƒ˜-แƒ‘แƒแƒ˜แƒขแƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ“แƒ, แƒ”แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ แƒ–แƒ”แƒ›แƒแƒ— แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒš แƒ˜แƒ“แƒ”แƒ”แƒ‘แƒ—แƒแƒœ. แƒ—แƒฃแƒœแƒ“แƒแƒช แƒšแƒแƒ’แƒ˜แƒ™แƒ sleep_on/wake_up แƒแƒ แƒช แƒ˜แƒกแƒ” แƒฃแƒชแƒฎแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ.

แƒ—แƒแƒœแƒแƒ›แƒ”แƒ“แƒ แƒแƒ•แƒ” Linux แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ”แƒ‘แƒ˜, FreeBSD, NetBSD, OpenBSD

แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒ’แƒแƒ•แƒ˜แƒแƒ แƒ” แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ—แƒแƒœแƒแƒ›แƒ”แƒ“แƒ แƒแƒ•แƒ” แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜. แƒแƒ แƒชแƒ”แƒ แƒ— แƒ›แƒแƒ—แƒ’แƒแƒœแƒก แƒแƒฆแƒแƒ  แƒแƒฅแƒ•แƒก แƒ“แƒ˜แƒกแƒ™แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ (แƒ’แƒแƒกแƒแƒ™แƒ•แƒ˜แƒ แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก). Linux-แƒก แƒแƒฅแƒ•แƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒ˜แƒ›แƒžแƒšแƒ”แƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ. แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› แƒกแƒแƒ›แƒ˜ แƒ—แƒแƒœแƒแƒ›แƒ”แƒ“แƒ แƒแƒ•แƒ” BSD แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒฏแƒแƒœ แƒ“แƒแƒ˜แƒกแƒแƒœแƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒš แƒ™แƒแƒ“แƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒ›แƒžแƒšแƒ”แƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒแƒก, แƒฌแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ“แƒ”แƒ‘แƒ˜แƒแƒœ แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒ˜แƒกแƒ’แƒแƒœ.

แฒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ fs/pipe.c (Linux-แƒ–แƒ”) แƒแƒœ sys/kern/sys_pipe.c (*BSD-แƒ–แƒ”), แƒแƒ›แƒแƒก แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ˜ แƒ—แƒแƒ•แƒ“แƒแƒ“แƒ”แƒ‘แƒ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ. แƒ“แƒฆแƒ”แƒ•แƒแƒœแƒ“แƒ”แƒšแƒ˜ แƒ™แƒแƒ“แƒ˜ แƒ”แƒฎแƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก แƒ“แƒ แƒ˜แƒกแƒ”แƒ—แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒแƒก, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ แƒ•แƒ”แƒฅแƒขแƒแƒ แƒฃแƒšแƒ˜ แƒ“แƒ แƒแƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ˜ I/O. แƒ“แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก, แƒ‘แƒšแƒแƒ™แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒ˜ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ“แƒ”แƒ‘แƒ. แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒแƒช แƒ™แƒแƒšแƒ”แƒฏแƒ”แƒ‘แƒก แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒฃแƒšแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ•แƒแƒšแƒ˜ แƒ™แƒฃแƒ แƒกแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒงแƒแƒ•แƒ”แƒš แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ›แƒ” แƒ›แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒ“แƒ แƒซแƒ•แƒ”แƒšแƒ˜ แƒจแƒแƒ‘แƒšแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ—แƒฎแƒ แƒ (แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ SIGPIPE แƒ“แƒ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ˜ EPIPE แƒ“แƒแƒฎแƒฃแƒ แƒฃแƒš แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ–แƒ” แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒกแƒแƒก) แƒงแƒ•แƒ”แƒšแƒ แƒแƒ› แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ—แƒแƒœแƒแƒ›แƒ”แƒ“แƒ แƒแƒ•แƒ” แƒ‘แƒ˜แƒ แƒ—แƒ•แƒจแƒ˜. แƒ›แƒ” แƒแƒšแƒ‘แƒแƒ— แƒ•แƒ”แƒ แƒแƒกแƒ“แƒ แƒแƒก แƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ• PDP-11 แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒก แƒ แƒ”แƒแƒšแƒฃแƒ  แƒชแƒฎแƒแƒ•แƒ แƒ”แƒ‘แƒแƒจแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒ แƒแƒ› แƒแƒ แƒ˜แƒก แƒกแƒแƒกแƒฌแƒแƒ•แƒšแƒ˜ แƒ™แƒแƒ“แƒ˜แƒ“แƒแƒœ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒ˜แƒฌแƒ”แƒ แƒ แƒฉแƒ”แƒ›แƒก แƒ“แƒแƒ‘แƒแƒ“แƒ”แƒ‘แƒแƒ›แƒ“แƒ” แƒฌแƒšแƒ”แƒ‘แƒ˜แƒ— แƒแƒ“แƒ แƒ”.

แƒ“แƒ˜แƒ•แƒ˜ แƒ™แƒแƒžแƒฃแƒ แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  2011 แƒฌแƒ”แƒšแƒก แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ:แƒ›แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ FIFO-แƒ”แƒ‘แƒ˜แƒก Linux แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ" แƒ’แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒ— แƒ›แƒ˜แƒ›แƒแƒฎแƒ˜แƒšแƒ•แƒแƒก, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ”แƒ‘แƒ˜ (แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ•) Linux-แƒจแƒ˜. แƒ แƒฃแƒแƒฎแƒšแƒ”แƒกแƒ˜ แƒฉแƒแƒ“แƒ”แƒœแƒ Linux-แƒจแƒ˜ แƒแƒกแƒแƒฎแƒแƒ•แƒก แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜แƒก แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ“แƒ”แƒšแƒก, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒแƒฆแƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒ“แƒ แƒแƒ”แƒ‘แƒ˜แƒ— แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒก; แƒ“แƒ แƒแƒกแƒ”แƒ•แƒ” แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก, แƒ—แƒฃ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒแƒ“ แƒจแƒแƒ แƒก แƒฌแƒแƒ•แƒ˜แƒ“แƒ แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ”แƒ‘แƒ˜ Unix-แƒ˜แƒก แƒ›แƒ”แƒ”แƒฅแƒ•แƒกแƒ” แƒ’แƒแƒ›แƒแƒชแƒ”แƒ›แƒ˜แƒก แƒ‘แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก "แƒซแƒแƒšแƒ˜แƒแƒœ แƒ™แƒแƒœแƒกแƒ”แƒ แƒ•แƒแƒขแƒ˜แƒฃแƒšแƒ˜ แƒฉแƒแƒ™แƒ”แƒขแƒ•แƒ˜แƒกแƒ’แƒแƒœ".

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ