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