, . , - ; () - 322 . , , (. 8); . +----------+ | | +-----------------------+ | | || v +----------+ +------------+-----------+ | | | | | | +------+-----+-----------+ | ^ | | v | +------------+-----------+ | | | | | | +------+-----+-----------+ | ^ | | v | +------------+-----+-----+ | | | | | | +------------+-----------+ 10.22. "" , ioctl. - , - . , , - , - : "" ; . , - ( 10.22); - , - , 10.3, . - - . , , - : fd = open("/dev/ttyxy",O_RDWR); ioctl(fd,PUSH,TTYLD); PUSH - , TTYLD - , . , . , " - ", - ioctl ioctl(fd,POP,0); , 323 , , - . , , . - . 10.4.1  , - (. [Pike 84]). - , . , - ; - . +---------+ +---------+ +-----------------+ | shell 1 | | shell 2 | | mpx | +---------+ +---------+ +-----------------+ ---------------+---------------+-----------+---+-------+---- | ^ | ^ +--+ ^ | ^ | ^ | | | | | +--+ | | | | | | | | | | | | | | v | v | - v | v | - | | - +-+++ - +-+++ -+-+++ +-+++- | | | | | | | | -| | | | | |- | | +++-+ +++-+ +++-+ +++-+ | | | ^ +-----------+-^------+ ^ | ^ | | | | | +---------+-+--------+ | | | | | | | | | | +-----------+ | | | v | v | v | v +-----------+ v | +-+++-+++ +-+++-+++ +-+++ - | | | | | | | | | | - | | | - +++-+++-+ +++-+++-+ - +-+-+ | ^ | ^ | ^ | ^ - 1 | +-+ | | +-+ | 2 +-----+ +-----+ 10.23. - 10.23 . mpx, - . Mpx , , - , .. mpx , - , , , . - , - : , - , ; , . , - ( 10.24), mpx , ( , ). Mpx 324 +----------------------------------------------------------------+ | /* , 0 1 | | */ | | (;;) /* */ | | { | | (); /* - */ | | , ; | | ( ) | | { | | : /* - | | - | | */ | | ( ) /* , | | */ | | { | | ; | | : | | ( ) | | { | | mpx; | | ; /* "" */ | | } | | /* - */ | | ; | | , stdin, | | stdout, stderr; | | ; | | shell; /* */| | } | | /* "" , */ | | -| | , - | | ; | | ; /* "" */ | | | | : /* | | */ | | , | | ; | | ;| | ; /* "" */ | | } | | } | +----------------------------------------------------------------+ 10.24. . Mpx - , ( ), shell'. shell ; . mpx , - . Mpx - , select. - , mpx , 325 , , , - , - . , - , ; mpx . - , . , ; mpx , , . ioctl , - ; - . , - - , . - , ioctl, , mpx, - . 10.4.2  , "" . , , , . "" , . - , - . write "" , , , "" - , . . , , - , - . , . , - . - - , - . , (, ). , , - . - : * , - , . , , - , - . * , read - (, 326 newtty.c_cc[VMIN] = 0 10.17). - . * - . - , , - . , . .te1 10.5  UNIX. , ; . - - , , . . - - -, , , , ioctl. ioctl , - . - - , , , , , . , - , . - . - , , . . , , - , . - ioctl , - , - . Getty- : shell', - ioctl . - , "" . . - , . , . - . .te1 10.6  *1. , , , - - 327 . - , , . , - ? *2. 5, mknod . - , - mknod ? 3. , , . : - , , , - . - - . ? 4. mkfs , , - . mkfs ? ? - ? 5. mkfs fsck ( 5) , . . 6. , , UNIX. , . ? : * - , * , * , , * : - , - ? 7. UNIX , - . , , , , "". ( ) . ? 8. , - mount. , . , , , . . 9. , 10.14, . , . , - ; - . , write - printf(output); 10. , : ed file & . 328 11. crw--w--w- 2 mjb lus 33,11 Oct 25 20:27 tty61 . , "mjb", . ? 12. , . - . , write ? 13. stty: , - . . 14. , . 15. , , - , . - ? *16. getty- - . , getty-, ? ? 17. shell , "- " - . , ( shell') ? *18. , , "". , - ? 19. getty- , login - . , - ? 20. ("/dev /tty"), 10.3.6. ? (: stat fstat). 21. , - , - , - . *22. () - ( ) . *23. , - , - . . : , - , ? 24. ps - . ps , . , - ps . , . 329