рдирдорд╕реНрддреЗ рд╡рд┐рд╢реНрд╡! рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдореЗрдВ рдЧрд╣рд░рд╛ рд╡рд┐рд╕рд░реНрдЬрди


рдореБрдЭреЗ рдпрд╣ рд▓реЗрдЦ рд╕рд┐рд╢реНрдиреА рдкреНрд░рд┐рдВрдЯрдл рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░ рдПрдХ рд▓реЗрдЦ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЯрд░реНрдорд┐рдирд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛ рдХрд┐рд╕ рддрд░рд╣ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкрд▓ рдпрд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЗрд╕ рджреЛрд╖ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдкрде рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╣рдо рдпрд╣ рднреА рд╕рдордЭреЗрдВрдЧреЗ рдХрд┐ рдЯрд░реНрдорд┐рдирд▓ рд╢реЗрд▓ рд╕реЗ рдЕрд▓рдЧ рдХреИрд╕реЗ рд╣реИ, рд╕реНрдпреВрдбреЛрдЯрд░реНрдорд┐рдирд▓ рдХреНрдпрд╛ рд╣реИ, рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдмрд╣реБрдд рдХреБрдЫред


рдореВрд▓ рдмрд╛рддреЗрдВ


рдЖрдЗрдП рдкрд╣рд▓реЗ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдЯрд░реНрдорд┐рдирд▓, рд╢реЗрд▓, рдХрдВрд╕реЛрд▓ рдХреНрдпрд╛ рд╣реИ, рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдХреИрд╕реЗ рд╕рд╛рдзрд╛рд░рдг рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рдФрд░ рдпрд╣ рдХреНрдпреЛрдВ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рдлреА рдЬрд╛рдирдХрд╛рд░реА рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦреА рдЬрд╛ рдЪреБрдХреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рд╕реБрдирд╛рдИ рджреЗрдЧрд╛ред рдпрд╣рд╛рдВ рд▓рдЧрднрдЧ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рд▓реА рдЧрдИ рдереА, рдореИрдВ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛ред рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЗрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред




рдЕрдВрддрд┐рдо


рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдПрдХ рдбрд┐рд╕реНрдкреНрд▓реЗ рдФрд░ рдПрдХ рдХреАрдмреЛрд░реНрдб рдХрд╛ рд╕рдВрдпреЛрдЬрди рд╣реИ, рдЬреЛ рдПрдХ рднреМрддрд┐рдХ рдЙрдкрдХрд░рдг рд╣реИред рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдХреЗ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╕рдВрдпреЛрдЬрди рдмрдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╡реЗ рдЯреЗрд▓реАрдкреНрд░рд┐рдВрдЯрд░ (рдЯреЗрд▓реЗрдЯрд╛рдЗрдк, рдЯреЗрд▓реЗрдЯрд╛рдЗрдкреНрд░рд┐рдЯрд░ рдпрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ TTY) рдирд╛рдордХ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдХрд░рдг рдереЗ, рдпрд╛рдиреА рдкреНрд░рд┐рдВрдЯрд░ рдФрд░ рдХреАрдмреЛрд░реНрдб рдХрд╛ рд╕рдВрдпреЛрдЬрдиред рдЖрдорддреМрд░ рдкрд░, рдХрдИ рдЯрд░реНрдорд┐рдирд▓ рдПрдХ рд╣реА рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рд╣реА рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдЕрдкрдирд╛ рд╕рддреНрд░ рдерд╛, рджреВрд╕рд░реЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ред рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдирд╛рдо рдЗрд╕рд▓рд┐рдП рд░рдЦрд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЯрд░реНрдорд┐рдирд▓ рдХреЗрдмрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрдерд┐рдд рдерд╛ред


рдпрд╣ рдЯреЗрд▓реЗрдЯрд╛рдЗрдк рд╣реИ :


Teletype

рдФрд░ рдпрд╣ рдЯрд░реНрдорд┐рдирд▓ рд╣реИ :


Terminal



рдХрдВрд╕реЛрд▓


рдХрдВрд╕реЛрд▓ (рдХрдВрд╕реЛрд▓) - рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдЬреЛ рд╕реАрдзреЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рд╕реАрдзреЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рдерд╛ред рдХрдВрд╕реЛрд▓ рдХреЛ рд▓реЛрдЧреЛрдВ рдХреЗ рдХрдбрд╝рд╛рдИ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рд░реНрдХрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рдерд╛ред




рдЦреЛрд▓


рдпрджрд┐ рдкрд┐рдЫрд▓реЗ рджреЛ рднреМрддрд┐рдХ рдЙрдкрдХрд░рдг рд╣реИрдВ, рддреЛ рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИред


рд╢реЗрд▓ рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рджреБрднрд╛рд╖рд┐рдпрд╛ рд╣реИред рдЕрдиреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рд╣реИред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╢реИрд▓ рд╣реИрдВред рд╕рдмрд╕реЗ рдЖрдо рд╣реИ рдмреИрд╢ (рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЙрд░реНрди рдЕрдЧреЗрди рд╢реЗрд▓ рд╕реЗ, рдЬреИрд╕рд╛ рдХрд┐ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ, "рдмреЙрд░реНрди рдЕрдЧреЗрди" рд╢реЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рдХреНрдп рд╣реИ, рдЕрд░реНрдерд╛рдд "рдкреБрдирд░реНрдЬреАрд╡рд┐рдд" рд╢реИрд▓)ред рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг: рдбреИрд╢ (рдПрдХ рд╣рд▓реНрдХрд╛ рд╢реЗрд▓, рдЙрдкрд▓рдмреНрдз рдпрджрд┐ рдЖрдк рдмрд╛рдЗрдирд░реА рдХреЛ / рдмрд┐рди / рд╢) рдкрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ Zshред




рдмреЗрд╢рдХ, рдЯрд░реНрдорд┐рдирд▓ рдФрд░ рдХрдВрд╕реЛрд▓ рджреЛрдиреЛрдВ рдЖрдзреБрдирд┐рдХ рд╕рдордп рдореЗрдВ рдЕрдкрдирд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдирд╣реАрдВ рдЦреЛрдЬ рдкрд╛рдПред рдЗрд╕рд▓рд┐рдП, рдЖрдЧреЗ рд╣рдо рдРрд╕реА рдЪреАрдЬреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬреИрд╕реЗ рдХрд┐ рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдХрдВрд╕реЛрд▓ ред


рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░


рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ - рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдПрдХ рдПрдореБрд▓реЗрдЯрд░ред рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдЙрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдПрдХреНрд╕ рд╡рд┐рдВрдбреЛ рд╕рд┐рд╕реНрдЯрдо - рдмреИрд╢, рд╡рд┐рдо рдФрд░ рдЕрдиреНрдп рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдмрд╛рддрдЪреАрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЖрдЗрдП рдкрд╣рд▓реЗ рдЯрд░реНрдорд┐рдирд▓ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:


  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ
  2. рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЗрдВ рдХрдВрдкреНрдпреВрдЯрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдбрд┐рд▓реАрд╡рд░реА

рддреЛ рд╣рдорд╛рд░рд╛ рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рд░рдирд┐рдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдпреВрдЬрд░ рдЗрдирдкреБрдЯ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рднреА рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрд░реНрде рд░рд╣рддрд╛ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдмреАрдЪ, рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рдд рд╣реЛрддреА рд╣реИред рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг: рд╕реВрдХреНрддрд┐-рдЯрд░реНрдорд┐рдирд▓, рдПрдХреНрд╕рдЯрд░реНрдо, рдХреЛрдиреЛрд▓рд╛ред


рдХреГрдкрдпрд╛ рд╢реЗрд▓ рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдХреЛ рднреНрд░рдорд┐рдд рди рдХрд░реЗрдВ!
рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдПрдХ рдЬреАрдпреВрдЖрдИ рдПрдкреНрд▓реАрдХреЗрд╢рди рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХреНрд╕ рд╡рд┐рдВрдбреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рд╡рд┐рдВрдбреЛ рд╣реИред рд╢реЗрд▓ рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рджреБрднрд╛рд╖рд┐рдпрд╛ рд╣реИ, рдпрд╛рдиреА рд╕рд┐рд░реНрдл рдПрдХ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрдХ рд╣реИ, рдЗрд╕рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рд╢реЗрд▓ рдирд╣реАрдВ рд╣реИред рдХрд╛рдлреА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рдЖрдк рдмреИрд╢ рд▓реЙрдиреНрдЪ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ , рдЖрдк рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдмреИрд╢ рдХреЛ рдЕрдкрдиреЗ рдЕрдВрджрд░ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ ред рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдФрд░ рдмреИрд╢ рдмрд┐рд▓реНрдХреБрд▓ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИрдВред рдкрд╣рд▓рд╛ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рджреВрд╕рд░рд╛ - рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдПред


рд▓реЗрдЦ рдореЗрдВ рдЖрдЧреЗ, рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рд╕рднреА рд╕рдВрджрд░реНрдн рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВрдЧреЗред




рд╡рд░реНрдЪреБрдЕрд▓ рдХрдВрд╕реЛрд▓ (рд╡рд░реНрдЪреБрдЕрд▓ рдЯрд░реНрдорд┐рдирд▓)


Ctrl + Alt + FN рджрдмрд╛рдПрдВ, рдЬрд╣рд╛рдВ N рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ 1 рд╕реЗ 6. рддрдХ рдорд╛рди рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдиреЗ рдЕрднреА рджреЗрдЦрд╛ рд╣реИ рдЙрд╕реЗ рд╡рд░реНрдЪреБрдЕрд▓ рдХрдВрд╕реЛрд▓ (рд╡рд░реНрдЪреБрдЕрд▓ рдХрдВрд╕реЛрд▓) рдпрд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдЯрд░реНрдорд┐рдирд▓ (рд╡рд░реНрдЪреБрдЕрд▓ рдЯрд░реНрдорд┐рдирд▓) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд╣рд╛ рдерд╛? рдХрдИ рдЯрд░реНрдорд┐рдирд▓ рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рдереЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЯрд░реНрдорд┐рдирд▓ рдПрдХ рдЕрд▓рдЧ рд╕рддреНрд░ рдерд╛, рдЬреЛ рджреВрд╕рд░реЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдерд╛ред рд╡рд░реНрдЪреБрдЕрд▓ рдХрдВрд╕реЛрд▓ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ: рдЖрдкрдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рдЕрдВрджрд░ рдХрдИ рд╕реНрд╡рддрдВрддреНрд░ рд╕рддреНрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдВрдкреНрдпреВрдЯрд░ рд╕рдВрд╕рд╛рдзрди рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рд╣реИрдВ)ред


рдЖрдк рдЗрд╕ рдЗрдХрд╛рдИ рдХреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдХрдВрд╕реЛрд▓ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдЯрд░реНрдорд┐рдирд▓ рджреЛрдиреЛрдВ рдХрд╛ рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХрдВрд╕реЛрд▓ рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рд╕реАрдзреЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рдЯрд░реНрдорд┐рдирд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рд╡рд░реНрдЪреБрдЕрд▓ рдЯрд░реНрдорд┐рдирд▓ рдПрдХ рдЕрд░реНрде рдореЗрдВ, рд╕реАрдзреЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред




TTY рдбрд┐рд╡рд╛рдЗрд╕


рдкреНрд░рддреНрдпреЗрдХ рдЯрд░реНрдорд┐рдирд▓ рдХреЛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ TTY рдбрд┐рд╡рд╛рдЗрд╕ (рдЯрд░реНрдорд┐рдирд▓ рдбрд┐рд╡рд╛рдЗрд╕) рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрдВрд╕реЛрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЯреЗрд▓реЗрдЯрд╛рдЗрдкреНрд╕ рдЖрдкрдХреЛ рдорд┐рд▓рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЯреАрдЯреАрд╡рд╛рдИ рдореЗрдВ рдХрдореА рдЖрдЬ рддрдХ рдмрд░рдХрд░рд╛рд░ рд╣реИред


TTY рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рджреЛ рдореВрд▓рднреВрдд рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ:


  1. рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рд╡рд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреАрдмреЛрд░реНрдб рдЗрдирдкреБрдЯ рджреЗрдиреЗ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
  2. TTY рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди (рд░реВрд╕реА рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди)ред рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди рдбреНрд░рд╛рдЗрд╡рд░ рдПрдХреНрд╕реЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ, рдЬреЛ рд╣рд╛рд▓рд╛рдВрдХрд┐, TTY рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рддрд░реНрдХ рд▓рд╛рддрд╛ рд╣реИред рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди рдкреНрд░реЙрдХреНрд╕реА рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдШрдЯрдХ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХрд╛ рдХреНрд╖реЗрддреНрд░ рдХреНрдпрд╛ рд╣реИ, рд╣рдо рд▓реЗрдЦ рдХреЗ рджреМрд░рд╛рди рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗред

TTY рдбрд┐рд╡рд╛рдЗрд╕ рдмрдирд╛рдПрдБ:



TTY рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ 3 рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:


  1. рдХрдВрд╕реЛрд▓ рдбрд┐рд╡рд╛рдЗрд╕ - рд╡рд░реНрдЪреБрдЕрд▓ рдХрдВрд╕реЛрд▓ рдСрдкрд░реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд░реНрдиреЗрд▓ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред
  2. PTY рдбрд┐рд╡рд╛рдЗрд╕ (рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓) - рд╡рд┐рдВрдбреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЯрд░реНрдорд┐рдирд▓ рдСрдкрд░реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред
  3. рд╕реАрд░рд┐рдпрд▓ рдбрд┐рд╡рд╛рдЗрд╕ - рд╕реАрдзреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рдВрдЧрдарди рдореЗрдВ рдирд┐рдореНрдирддрдо рд╕реНрддрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ TTY рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ - рдЫрджреНрдо-рдЯрд░реНрдорд┐рдирд▓ред




TTY рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди


рд╣рдо TTY рдбрд┐рд╡рд╛рдЗрд╕ рд▓рд╛рдЗрди рдХреЗ рдЕрдиреБрд╢рд╛рд╕рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред


рдПрдХ рдкрдВрдХреНрддрд┐ рдЕрдиреБрд╢рд╛рд╕рди рдХреА рдкрд╣рд▓реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ I / O рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рд╡рд░реНрдг ( рдирд┐рдпрдВрддреНрд░рдг рд╡рд░реНрдг рджреЗрдЦреЗрдВ) рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдкрдгред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрд┐рд╕реА рднреА рдкрд╛рда рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЪрд╛рдирдХ рдЖрдкрдХреЛ рдПрд╣рд╕рд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрд╕реЗ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдЧрд▓рддреА рд╣реБрдИ рдереА рдФрд░ рдЗрд╕реЗ рдорд┐рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди рдЦреЗрд▓рдиреЗ рдореЗрдВ рдЖрддрд╛ рд╣реИред


рд╣рдо рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╣рдо рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдмреИрд╢ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдПрдХ TTY рдбрд┐рд╡рд╛рдЗрд╕ рдЗрдХреЛ рд╕рдХреНрд╖рдо рдХреЗ рд╕рд╛рде рдХреИрдиреЛрдирд┐рдХрд▓ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЧреВрдВрдЬ рд╕реНрдХреНрд░реАрди рдкрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╡рд░реНрдгреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣реИред


рдЬрдм рд╣рдо рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдг a , рдпрд╣ рд╡рд░реНрдг TTY рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ TTY рд▓рд╛рдЗрди рдХреЗ рдЕрдиреБрд╢рд╛рд╕рди рд╕реЗ рдмрд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред рд╡рд╣ рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рдмрдлрд░ рдореЗрдВ рдПрдХ рдЪрд░рд┐рддреНрд░ рдкрдврд╝рддреА рд╣реИ, рджреЗрдЦрддреА рд╣реИ рдХрд┐ echo рдореЛрдб рдЪрд╛рд▓реВ рд╣реИ, рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдЪрд░рд┐рддреНрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕рдордп, рдЙрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдХреБрдЫ рднреА рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЯрд░реНрдорд┐рдирд▓ рдбрд┐рд╡рд╛рдЗрд╕ рд╕рдВрд▓рдЧреНрди рд╣реИред рд╣рдореЗрдВ рдХреАрдмреЛрд░реНрдб рдкрд░ backspace рджрдмрд╛рдПрдВред рдкреНрд░рддреАрдХ ^? рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЗрди рдбрд┐рд╕рд┐рдкреНрд▓рд┐рди рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдФрд░ рдмрд╛рдж рдореЗрдВ, рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдВрддрд┐рдо рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдЪрд░рд┐рддреНрд░ рдХреЛ рдорд┐рдЯрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЗрд╕ рдЪрд░рд┐рддреНрд░ рдХреЛ рдЙрд╕рдХреЗ рдЖрдВрддрд░рд┐рдХ рдмрдлрд░ рд╕реЗ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдЪрд░рд┐рддреНрд░ рдХреЛ рднреА рд╕реНрдХреНрд░реАрди рд╕реЗ рдорд┐рдЯрд╛ рджреЗрддрд╛ рд╣реИред рдЕрдм, рдпрджрд┐ рд╣рдо Enter рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ TTY рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди рдЕрдВрддрддрдГ рдЯрд░реНрдорд┐рдирд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд░реАрдб рдмрдлрд░ рдХреЛ рд╕рдм рдХреБрдЫ рднреЗрдЬ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдПрд▓рдПрдл рд╕рд╣рд┐рдд рдЕрдиреБрд╢рд╛рд╕рди рдХреЗ рдЖрдВрддрд░рд┐рдХ рдмрдлрд░ рдХреЛ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрд╕реА рд╕рдордп, рдХрд░реНрд╕рд░ рдХреЛ рдПрдХ рдирдИ рд░реЗрдЦрд╛ рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрди рдкрд░ CR рдФрд░ LF рдЕрдХреНрд╖рд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ - рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рд╕реНрд╡рд░реВрдкрдг рд╣реИред


рдпрд╣ рд╣реИ рдХрд┐ рдХреИрдиреЛрдирд┐рдХрд▓ рдореЛрдб рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдпрд╣ Enter рджрдмрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рд╕рднреА рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╡рд░реНрдгреЛрдВ рдХреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдирд┐рдпрдВрддреНрд░рдг рд╡рд░реНрдгреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд░рддрд╛ рд╣реИред


TTY рд▓рд╛рдЗрди рд╕рдВрдкрд╛рджрди


TTY рд▓рд╛рдЗрди рдПрдбрд┐рдЯрд┐рдВрдЧ рд╡рд╣ рдШрдЯрдХ рд╣реИ рдЬреЛ рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди рдореЗрдВ рдЗрдирдкреБрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдпрд╣ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд▓рд╛рдЗрди рдПрдбрд┐рдЯрд┐рдВрдЧ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдФрд░ рдЗрдирдкреБрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреИрд╢ рдФрд░ рд╡рд┐рдо рдХрд╛ рдЕрдкрдирд╛ рд▓рд╛рдЗрди рдПрдбрд┐рдЯрд┐рдВрдЧ рд╣реИред


рд╣рдо рд╕реНрдЯрдЯреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрддрдорд╛рди TTY рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд▓рд╛рдЗрди рдХреА рдЕрдиреБрд╢рд╛рд╕рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдереЛрдбрд╝рд╛ рдкреНрд░рдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


рдмреИрд╢ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╢реЗрд▓ рдХреЛ рдЦреЛрд▓реЗрдВ рдФрд░ рдЯрд╛рдЗрдк рдХрд░реЗрдВ:


 stty icanon -echo 

рдЕрдм рдХреБрдЫ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдЗрдирдкреБрдЯ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧрд╛ (рдЖрдк рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рдЖрдк рдЕрднреА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЗрдирдкреБрдЯ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЖрдкрдиреЗ рд╕рд┐рд░реНрдл рдЗрдХреЛ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рджрд┐рдпрд╛ рд╣реИ - рдЕрд░реНрдерд╛рдд, рд╕реНрдХреНрд░реАрди рдкрд░ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╡рд░реНрдгреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рдиред рдЕрдм рджрд░реНрдЬ рдХрд░реЗрдВ:


 stty raw echo 

рдХреБрдЫ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдЖрдк рджреЗрдЦреЗрдВ рдХрд┐ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреИрд╕реЗ рдЯреВрдЯрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдбреИрд╢ - рдЯрд╛рдЗрдк /bin/sh ред рдЕрдм рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ (рдХреАрдмреЛрд░реНрдб рдкрд░ рдХреЛрдИ рднреА рдЕрдХреНрд╖рд░ Ctrl ) рдпрд╛ рдмрд╕ Enter рджрдмрд╛рдПрдБред рдЖрдк рд╣реИрд░рд╛рди рд╣реИрдВ - рд╕реНрдХреНрд░реАрди рдкрд░ рдпреЗ рдЕрдЬреАрдм рдЪрд░рд┐рддреНрд░ рдХреНрдпрд╛ рд╣реИрдВ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐, рдЕрдиреБрд╢рд╛рд╕рди рдХреЗ рд▓рд╛рдЗрди рдПрдбрд┐рдЯрд┐рдВрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╢реЗрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛ рд╣реИ, рд╣рдордиреЗ рд▓рд╛рдЗрди рдПрдбрд┐рдЯрд┐рдВрдЧ рдмреИрд╢ рдХреЛ рднреА рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЕрдм рд╣рдо рд▓рд╛рдЗрди рдХреЗ рдЕрдиреБрд╢рд╛рд╕рди рдХреЗ рдХрдЪреНрдЪреЗ рдореЛрдб рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рднрд╛рд╡ рдФрд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдореЛрдб рдЗрдирдкреБрдЯ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдкреНрд░реЛрд╕реЗрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдлреЙрд░реНрдореЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХрдЪреНрдЪреЗ рдореЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдо рдХреЗ рд▓рд┐рдП : рдпрд╣ рд╕рдВрдкреВрд░реНрдг рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЦреБрд▓рддрд╛ рд╣реИ рдФрд░ рдЗрдирдкреБрдЯ рдХреЛ рд╕реНрд╡рдпрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рддрд╛рдХрд┐ рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди рдХреЗ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рддреАрдХ рд╕реНрд╡рдпрдВ рд╡рд┐рдо рдХреЗ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рди рдХрд░реЗрдВред


рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдирд┐рдпрдВрддреНрд░рдг рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦреЗрдВред stty <control-character> <string> рдХрдорд╛рдВрдб рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
рдмреИрд╢ рдореЗрдВ рджрд░реНрдЬ рдХрд░реЗрдВ:


 stty erase 0 

рдЕрдм erase рдХрдВрдЯреНрд░реЛрд▓ рдХреИрд░реЗрдХреНрдЯрд░ 0 рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рдПрдЧрд╛ред backspace рдмрдЯрди рдЖрдорддреМрд░ рдкрд░ ^? рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ ^? , рд▓реЗрдХрд┐рди рдЕрдм рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдЪрд░рд┐рддреНрд░ рдХреЛ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдкреАрдЯреАрдПрд╕ рд░реАрдб рдмрдлрд░ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ - рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЖрдЬрд╝рдорд╛рдПрдВред рдЕрдм рдЖрдк рдХреАрдмреЛрд░реНрдб рдкрд░ 0 рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдгреЛрдВ рдХреЛ рдорд┐рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рд╕реНрд╡рдпрдВ tty рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди рд╕реЗ рдПрдХ рдЪрд┐рд╣реНрдирд┐рдд рдирд┐рдпрдВрддреНрд░рдг рд╡рд░реНрдг рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрдЬ рдЪрд░рд┐рддреНрд░ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдерд╛ред рдЖрдк рдХрдорд╛рдВрдб stty erase ^\? рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯрд┐рдВрдЧ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ stty erase ^\? рдпрд╛ рдмрд╕ рдЯрд░реНрдорд┐рдирд▓ рдХреЛ рдмрдВрдж рдХрд░рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдЯрдЯреА рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИред


рдЖрдк рдореИрди рд╕реНрдЯреНрдЯреА рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред




рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдФрд░ рд╕реНрдпреВрдбреЛрдЯрд░реНрдорд┐рдирд▓


рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо X рд╡рд┐рдВрдбреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдирдпрд╛ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВ, GNOME рдЯрд░реНрдорд┐рдирд▓ рд╕рд░реНрд╡рд░ рдПрдХ рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЬрдиреНрдо рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╢реЗрд▓ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреИрд╢) рд╣реИред


рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рддрдерд╛рдХрдерд┐рдд рд╕реНрдпреВрдбреЛрдЯрд░реНрдорд┐рдирд▓ (рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓, рдкреАрдЯреАрд╡рд╛рдИ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдЫрджреНрдо-рдЯрд░реНрдорд┐рдирд▓ рд╕реНрд╡рдпрдВ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рд╕реЗ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рд╕реЗ рдЗрдирдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред


рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рдЖрднрд╛рд╕реА TTY рдЙрдкрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ :
1) PTY рдорд╛рд╕реНрдЯрд░ (PTM) - рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдкреНрд░рдореБрдЦ рд╣рд┐рд╕реНрд╕рд╛ред рдЧрдиреЛрдо рдЯрд░реНрдорд┐рдирд▓ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдЕрдВрджрд░ рдЪрд▓ рд░рд╣реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХреАрдмреЛрд░реНрдб рдЗрдирдкреБрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдПред рдЧрдиреЛрдо рдЯрд░реНрдорд┐рдирд▓ рд╕рд░реНрд╡рд░, рдмрджрд▓реЗ рдореЗрдВ, рдПрдХреНрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕ рд╡рд┐рдВрдбреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред
2) PTY рдЧреБрд▓рд╛рдо (PTS) - рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдЧреБрд▓рд╛рдо рд╣рд┐рд╕реНрд╕рд╛ред рд╕реНрдХреНрд░реАрди рдкрд░ рдХреАрдмреЛрд░реНрдб рдЗрдирдкреБрдЯ рдФрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдЕрдВрджрд░ рдЪрд▓ рд░рд╣реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо, рдХрд╛рд░реНрдпрдХреНрд░рдо рдЦреБрдж рд╣реА рдРрд╕рд╛ рд╕реЛрдЪрддрд╛ рд╣реИ (рдореИрдВ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╕рдордЭрд╛рдКрдВрдЧрд╛, рдереЛрдбрд╝рд╛ рдФрд░ рдЖрдЧреЗ)ред


рдкреАрдЯреАрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рджрд░реНрдЬ рдХреЛрдИ рднреА рдбреЗрдЯрд╛ рдкреАрдЯреАрдПрдо рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЗрдирдкреБрдЯ рд╣реИ, рдпрд╛рдиреА рдпрд╣ рдкреАрдЯреАрдПрдо рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд: рдкреАрдЯреАрдПрдо рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рджрд░реНрдЬ рдХреЛрдИ рднреА рдбреЗрдЯрд╛ рдкреАрдЯреАрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЗрдирдкреБрдЯ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдЧрдиреЛрдо рдЯрд░реНрдорд┐рдирд▓ рд╕рд░реНрд╡рд░ рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдЕрдВрджрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреАрдЯреАрдПрдо рдбрд┐рд╡рд╛рдЗрд╕ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреАрдЯреАрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред


рдПрдХ рдирдпрд╛ рдЯрд░реНрдорд┐рдирд▓ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
1) GNOME рдЯрд░реНрдорд┐рдирд▓ рд╕рд░реНрд╡рд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдХрд░рдг / рджреЗрд╡ / ptmx рдкрд░ рдЦреБрд▓реЗ () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдорд╛рд╕реНрдЯрд░ рдФрд░ рджрд╛рд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдмрдирд╛рддрд╛ рд╣реИред рдЦреБрд▓реЗ () рдХреЙрд▓ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ PTM рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ - master_fd рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ ред
2) GNOME рдЯрд░реНрдорд┐рдирд▓ рд╕рд░реНрд╡рд░ fork() рдХреЙрд▓ рдХрд░рдХреЗ рдПрдХ рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирдпрд╛ рдЯрд░реНрдорд┐рдирд▓ рд╣реЛрдЧрд╛ред
3) рдкреАрдЯреАрдПрд╕ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ, рдбрд┐рд╡рд╛рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ 0, 1, 2 (рдХреНрд░рдорд╢рдГ, рд╕реНрдЯрдбрдЖрдЙрдЯ рдФрд░ рд╕реНрдЯрдбрд░,) рдкрд░ рдЦреБрд▓рддрд╛ рд╣реИред рдЕрдм, рдорд╛рдирдХ рдЯрд░реНрдорд┐рдирд▓ I / O рдЗрд╕ рдЙрдкрдХрд░рдг рдкрд░ рдмрд╣рддрд╛ рд╣реИред
4) exec() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреБрдЫ рд╢реИрд▓ рдЖрдорддреМрд░ рдкрд░ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреИрд╢)ред рдмрд╛рдж рдореЗрдВ рдмреИрд╢ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдмреИрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╣реЛрдЧрд╛, рдпрд╛рдиреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлреНрд▓реЛ рдХреЛ рдкреАрдЯреАрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдЖрдк рдЕрдкрдиреЗ рд▓рд┐рдП рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ ls -la /proc/self/fd рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдорд╛рдирдХ рдЯрд░реНрдорд┐рдирд▓ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╡рд╛рд╣ рдХреИрд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:


рдкреАрдЯреАрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдкрде / рджреЗрд╡ / рдкреАрдЯреАрдПрд╕ / рдПрди рдкрд░ рд╕реНрдерд┐рдд рд╣реИ, рдФрд░ рдкреАрдЯреАрдПрдо рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдкрде рд╣рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд░реБрдЪрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЧрдиреЛрдо рдЯрд░реНрдорд┐рдирд▓ рд╕рд░реНрд╡рд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦреБрд▓реЗ рдкреАрдЯреАрдПрдо рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкрде рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдореЗрдВ open() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рдзрд╛рд░рд╛рдУрдВ рдкрд░ рдкреАрдЯреАрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЦреЛрд▓рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрде рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред


рдпрд╛рдж рд░рдЦреЗрдВ, рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдПрдХ рдкреАрдЯреАрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗрд╡рд▓ рдпрд╣ рд╕реЛрдЪрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рд╕рдВрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреАрдЯреАрдПрд╕ рднреА рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдбрд┐рд╡рд╛рдЗрд╕ (рдЯреАрдЯреАрд╡рд╛рдИ рдбрд┐рд╡рд╛рдЗрд╕) рд╣реИ, рд▓реЗрдХрд┐рди рдкреАрдЯреАрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯреАрдЯреАрд╡рд╛рдИ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкреАрдЯреАрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреАрдмреЛрд░реНрдб рд╕реЗ рдЗрдирдкреБрдЯ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдорд╛рд╕реНрдЯрд░ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рд╕реНрдЯрд░ рдбрд┐рд╡рд╛рдЗрд╕ред рдЗрд╕реАрд▓рд┐рдП рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдХреЛ рдЗрд╕ рддрд░рд╣ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдХреЗрд╡рд▓ (рдлрд┐рд░ рд╕реЗ ??) рдЯрд░реНрдорд┐рдирд▓ рдХреА рдирдХрд▓ рдХрд░рддрд╛ рд╣реИред рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдФрд░ рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рд╕рд┐рд░реНрдл рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЯрд░реНрдорд┐рдирд▓ рдХреЛ рд╕реАрдзреЗ рд╡рд┐рдВрдбреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдЕрдВрджрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред


рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреАрдЯреАрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдПрдХ TTY рдбрд┐рд╡рд╛рдЗрд╕ рд╣реИ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрд╣рд╛рдБ рдХреНрдпреЛрдВ рд╣реИ:


  1. рдЬрд┐рд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдЯрд░реНрдорд┐рдирд▓ рдбрд┐рд╡рд╛рдЗрд╕ рд╕рдВрд▓рдЧреНрди рд╣реИ, рдЙрд╕рдореЗрдВ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдЯрд░реНрдорд┐рдирд▓ рдХреА рд╕рднреА рдХреНрд╖рдорддрд╛рдПрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЧреВрдВрдЬ, рдЕрдХреНрд╖рдо / рд╕рдХреНрд╖рдо рд╡рд┐рд╣рд┐рдд рджреГрд╢реНрдпред
  2. рдкреНрд░реЛрдЧреНрд░рд╛рдо, рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ (рдпрд╣ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рдЯрд░реНрдорд┐рдирд▓ рд╣реИ), рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкреВрдЫ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рдкреВрдЫреЗрдВред
  3. рдЯреАрдЯреАрд╡рд╛рдИ рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди рднреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рдпрдВрддреНрд░рдг рдкрд╛рддреНрд░реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

PTM рдбрд┐рд╡рд╛рдЗрд╕ рднреА TTY рдбрд┐рд╡рд╛рдЗрд╕ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рднреА рднреВрдорд┐рдХрд╛ рдХреЛ рдирд╣реАрдВ рдирд┐рднрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдпрдВрддреНрд░рдг рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, PTM рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди рдХрдЪреНрдЪреЗ рдореЛрдб рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, PTS рд╕реЗ PTM рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рддреЗ рд╕рдордп рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рд╕реЗ read() рдФрд░ write() рд▓рд┐рдП рдХреЙрд▓ рдЕрднреА рднреА рдкрд╣рд▓реА рдмрд╛рд░ рджреЛрдиреЛрдВ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди рджреНрд╡рд╛рд░рд╛ рдкрд░реЛрд╕рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреНрд╖рдг рдФрд░ рднреА рдмрдбрд╝реА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдПрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред


рдЧрдиреЛрдо рдЯрд░реНрдорд┐рдирд▓ рд╕рд░реНрд╡рд░ рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдЕрдВрджрд░ рдЪрд▓ рд░рд╣реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:



рдпрд╣ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдПрдХ рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рджреЛрдиреЛрдВ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди рдХреА рднреВрдорд┐рдХрд╛ рдХреНрдпрд╛ рд╣реИред рдпрд╣рд╛рдВ, рдкреАрдЯреАрдПрдо рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдкреАрдЯреАрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдкрд╛рд╕ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ , рд╕рд╛рде рд╣реА рд╕рд╛рде рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдбрд┐рд▓реАрд╡рд░реА рдХреЗ рд▓рд┐рдПред рдЬрдм рд╣рдо рдкреАрдЯреАрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкреАрдЯреАрдПрдо рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди рдХреЛ рдЙрд▓рдЭрд╛ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред




рдЖрднрд╛рд╕реА рдЙрдкрдХрд░рдг


рдЖрдкрдиреЗ рд╢рд╛рдпрдж рд╕реЛрдЪрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрде / рджреЗрд╡ / рдкреАрдЯреАрдПрд╕ / рдПрди рдХреЗ рд╕рд╛рде рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдирд┐рдпрдорд┐рдд рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕рд╕реЗ рдбреЗрдЯрд╛ рд▓рд┐рдЦ тАЛтАЛрдпрд╛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ? рд╣рд╛рдВ, рдпреВрдирд┐рдХреНрд╕ рдЬреИрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕рднреА рдбрд┐рд╡рд╛рдЗрд╕ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдпреВрдирд┐рдХреНрд╕ рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдПрдХ рдлрд╛рдЗрд▓ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдбрд┐рд╡рд╛рдЗрд╕ рдлрд╝рд╛рдЗрд▓реЗрдВ (рдЕрдВрдЧреНрд░реЗрдЬрд╝реА - рдбрд┐рд╡рд╛рдЗрд╕ рдлрд╝рд╛рдЗрд▓) рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЗрдВ рдирд╣реАрдВ рд╣реИрдВред рдРрд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЖрднрд╛рд╕реА рдЙрдкрдХрд░рдг рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЕрд░реНрдерд╛рдд, рд╡реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрддреЗ рд╣реИрдВ, рдбрд┐рд╕реНрдХ рдкрд░ рдирд╣реАрдВред


рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рдпрдорд┐рдд рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреЛрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рди рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдЗрди рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ write() рдФрд░ read() рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рдХреЙрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рджреНрд╡рд╛рд░рд╛ рджреА рдЬрд╛рдПрдЧреАред рдЪрд▓реЛ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред


рджреЛ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдЦреЛрд▓реЗрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб рдореЗрдВ tty рджрд░реНрдЬ рдХрд░реЗрдВред рдпрд╣ рдХрдорд╛рдВрдб рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рдХреМрди рд╕реЗ TTY рдбрд┐рд╡рд╛рдЗрд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдЯрд░реНрдорд┐рдирд▓ рдХреА рд╕реЗрд╡рд╛ рджреЗ рд░рд╣рд╛ рд╣реИред рдЕрдм echo "Hello, World!" > /dev/pts/N рджрд░реНрдЬ рдХрд░реЗрдВ echo "Hello, World!" > /dev/pts/N echo "Hello, World!" > /dev/pts/N рдкрд╣рд▓реЗ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ echo "Hello, World!" > /dev/pts/N рдкреАрдЯреАрдПрд╕ echo "Hello, World!" > /dev/pts/N , рдЬрд╣рд╛рдВ рдПрди рджреВрд╕рд░реА рд╡рд┐рдВрдбреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдкреАрдЯреАрдПрд╕ рдЗрдВрдбреЗрдХреНрд╕ рд╣реИ, рджреВрд╕рд░реА рд╡рд┐рдВрдбреЛ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ рдФрд░ рдЖрдк рдкрд╣рд▓реА рд╡рд┐рдВрдбреЛ рд╕реЗ рдЕрдкрдирд╛ рдЗрдирдкреБрдЯ рджреЗрдЦреЗрдВрдЧреЗред рдЕрдм рдЖрдкрдиреЗ рджреВрд╕рд░реА рд╡рд┐рдВрдбреЛ рдХреЗ рдкреАрдЯреАрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдбреЗрдЯрд╛ рд▓рд┐рдЦрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдЙрд╕ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ ред





рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдбрд┐рд╡рд╛рдЗрд╕


рд╣рдо рд▓реЗрдЦ рдХреЗ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдХреЗ рдХрд░реАрдм рдФрд░ рдХрд░реАрдм рдЖ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд▓рд┐рдирдХреНрд╕ рдХреЗ "рд╣реБрдб рдХреЗ рдиреАрдЪреЗ" рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ - рдХрд░реНрдиреЗрд▓ рд╕реНрддрд░ рдкрд░ рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдЙрдкрдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреЛрдб рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рджрд┐рдП рдЧрдП рдмреНрд▓реЙрдХ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдорд╣рддреНрд╡рд╣реАрди рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдХрдо рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдЬрд╛рдКрдВрдЧрд╛ред


рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рддрдерд╛рдХрдерд┐рдд "рдШрдЯрдХ рдЯреЛрдХрд░реА" рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдХреЛрд░ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рд╣рдо рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдШрдЯрдХ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдПрдХ рд╕рдВрдмрдВрдз рдЦреЛрдЬреЗрдВрдЧреЗред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред


рдЬрдм рд▓рд┐рдирдХреНрд╕ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рднреА рдРрд╕рд╛ рдбреНрд░рд╛рдЗрд╡рд░ рд╣реИред рдЗрд╕рдХрд╛ рдкрдВрдЬреАрдХрд░рдг рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ:


 static int __init pty_init(void) { legacy_pty_init(); unix98_pty_init(); // <- ,    return 0; } device_initcall(pty_init); // ,       

рд╕рднреА рдЖрдзреБрдирд┐рдХ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, unix98_pty_init() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:


 static void __init unix98_pty_init(void) { ptm_driver = tty_alloc_driver(NR_UNIX98_PTY_MAX, TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV | TTY_DRIVER_DEVPTS_MEM | TTY_DRIVER_DYNAMIC_ALLOC); if (IS_ERR(ptm_driver)) panic("Couldn't allocate Unix98 ptm driver"); pts_driver = tty_alloc_driver(NR_UNIX98_PTY_MAX, TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV | TTY_DRIVER_DEVPTS_MEM | TTY_DRIVER_DYNAMIC_ALLOC); if (IS_ERR(pts_driver)) panic("Couldn't allocate Unix98 pts driver"); ptm_driver->driver_name = "pty_master"; ptm_driver->name = "ptm"; ptm_driver->major = UNIX98_PTY_MASTER_MAJOR; ptm_driver->minor_start = 0; ptm_driver->type = TTY_DRIVER_TYPE_PTY; ptm_driver->subtype = PTY_TYPE_MASTER; ptm_driver->init_termios = tty_std_termios; ptm_driver->init_termios.c_iflag = 0; ptm_driver->init_termios.c_oflag = 0; ptm_driver->init_termios.c_cflag = B38400 | CS8 | CREAD; ptm_driver->init_termios.c_lflag = 0; ptm_driver->init_termios.c_ispeed = 38400; ptm_driver->init_termios.c_ospeed = 38400; ptm_driver->other = pts_driver; tty_set_operations(ptm_driver, &ptm_unix98_ops); pts_driver->driver_name = "pty_slave"; pts_driver->name = "pts"; pts_driver->major = UNIX98_PTY_SLAVE_MAJOR; pts_driver->minor_start = 0; pts_driver->type = TTY_DRIVER_TYPE_PTY; pts_driver->subtype = PTY_TYPE_SLAVE; pts_driver->init_termios = tty_std_termios; pts_driver->init_termios.c_cflag = B38400 | CS8 | CREAD; pts_driver->init_termios.c_ispeed = 38400; pts_driver->init_termios.c_ospeed = 38400; pts_driver->other = ptm_driver; tty_set_operations(pts_driver, &pty_unix98_ops); if (tty_register_driver(ptm_driver)) panic("Couldn't register Unix98 ptm driver"); if (tty_register_driver(pts_driver)) panic("Couldn't register Unix98 pts driver"); /* Now create the /dev/ptmx special device */ tty_default_fops(&ptmx_fops); ptmx_fops.open = ptmx_open; cdev_init(&ptmx_cdev, &ptmx_fops); if (cdev_add(&ptmx_cdev, MKDEV(TTYAUX_MAJOR, 2), 1) || register_chrdev_region(MKDEV(TTYAUX_MAJOR, 2), 1, "/dev/ptmx") < 0) panic("Couldn't register /dev/ptmx driver"); device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 2), NULL, "ptmx"); 

рдпрд╣рд╛рдБ рд╣рдо 3 рдЪреАрдЬреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:


  1. Pty рдорд╛рд╕реНрдЯрд░ рдбреНрд░рд╛рдЗрд╡рд░ рдФрд░ pty рдЧреБрд▓рд╛рдо рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП tty_set_operatons рдХреЛ рдХреЙрд▓ tty_set_operatons рд╣реИред
  2. ptmx_open рдлрд╝рдВрдХреНрд╢рди, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдХрд░рдг / рджреЗрд╡ / ptmx рдЦреЛрд▓рдиреЗ рдкрд░ рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рджреЛрдиреЛрдВ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдорд╣рддреНрд╡рдкреВрд░реНрдг: / dev / ptmx рдПрдХ PTM рдбрд┐рд╡рд╛рдЗрд╕ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдирдпрд╛ рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред
  3. рдкреАрдЯреАрдПрдо рдФрд░ рдкреАрдЯреАрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред

рдЖрдЗрдП рдЬрд╛рдиреЗ рдХреНрд░рдо рдореЗрдВ:


1. tty_set_operations


Tty_set_operations () рдлрд╝рдВрдХреНрд╢рди рд╡рд░реНрддрдорд╛рди рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рддрд╛рд▓рд┐рдХрд╛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ:


 void tty_set_operations(struct tty_driver *driver, const struct tty_operations *op) { driver->ops = op; }; 

Tty_operations рд╕рдВрд░рдЪрдирд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рддрд╛рд▓рд┐рдХрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рд╡рд╛рдЗрд╕ TTY рдбреНрд░рд╛рдЗрд╡рд░ рдлрд╝рдВрдХреНрд╢рди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдореИрдВ рд╕рдВрд░рдЪрдирд╛рдУрдВ pty_unix98_ops рдФрд░ ptm_unix98_ops рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓ ptm_unix98_ops , рдЬреЛ рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рднрд╛рдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рд╣реИрдВ:


 static const struct tty_operations ptm_unix98_ops = { .install = pty_unix98_install, .remove = pty_unix98_remove, .open = pty_open, .close = pty_close, .write = pty_write, // ... }; static const struct tty_operations pty_unix98_ops = { .install = pty_unix98_install, .remove = pty_unix98_remove, .open = pty_open, .close = pty_close, .write = pty_write, // ... }; 

рдпрд╣рд╛рдВ рдЖрдк pty_write рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, pty_write рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Sishny printf рдХреЗ рд▓реЗрдЦ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИ - рд╣рдо рдЗрд╕реЗ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗред


рдЖрдЗрдП рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╣рдорд╛рд░реА рдШрдЯрдХ рдЯреЛрдХрд░реА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рджреЛрдиреЛрдВ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рдореБрдЦреНрдп рддрд░реАрдХреЗ рдмрд┐рд▓реНрдХреБрд▓ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИрдВред рд╡реИрд╕реЗ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд░реАрдб () рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ - pty_read() рдЬреИрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд░реАрдбрд┐рдВрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди рджреНрд╡рд╛рд░рд╛ рдкрд░реЛрд╕реА рдЬрд╛рдПрдЧреАред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди рдХреА рджреВрд╕рд░реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрддреЗ рд╣реИрдВ - рдПрдХ рдЯреАрдЯреАрд╡рд╛рдИ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдирд╛ред




2. ptmx_open


рдЕрдм ptmx_open () рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ:


 static int ptmx_open(struct inode *inode, struct file *filp) { struct tty_struct *tty; //    -   ! fsi = devpts_acquire(filp); //     devpts index = devpts_new_index(fsi); //       /dev/pts // ... tty = tty_init_dev(ptm_driver, index); // ... devpts_pty_new(fsi, index, tty->link); //     /dev/pts retval = ptm_driver->ops->open(tty, filp); //  PTM ,   } 

рд╣рдо tty_init_dev() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдкрд╣рд▓рд╛ рддрд░реНрдХ PTM рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рдкреАрдЯреАрд╡рд╛рдИ рдЪрд╛рд▓рдХ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдлрд╛рдЗрд▓ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рдЯреАрдЯреАрд╡рд╛рдИ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред


 struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx) { struct tty_struct *tty; tty = alloc_tty_struct(driver, idx); retval = tty_driver_install_tty(driver, tty); /* * Structures all installed ... call the ldisc open routines. */ retval = tty_ldisc_setup(tty, tty->link); //  ,       return tty; } 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо alloc_tty_struct() рдлрд╝рдВрдХреНрд╢рди alloc_tty_struct() рдХрд░реЗрдВрдЧреЗ


 struct tty_struct *alloc_tty_struct(struct tty_driver *driver, int idx) { struct tty_struct *tty; tty = kzalloc(sizeof(*tty), GFP_KERNEL); //  tty_struct tty_ldisc_init(tty) //      tty_struct tty->driver = driver; //       tty_struct tty->ops = driver->ops; //        tty_struct.     tty->index = idx; //   tty  return tty; } 

рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдБ рджрд┐рд▓рдЪрд╕реНрдкреА tty_ldisc_init() рд╣реИ рд╡рд╣ рд╣реИ tty_ldisc_init() рдлрд╝рдВрдХреНрд╢рди:


 int tty_ldisc_init(struct tty_struct *tty) { struct tty_ldisc *ld = tty_ldisc_get(tty, N_TTY); if (IS_ERR(ld)) return PTR_ERR(ld); tty->ldisc = ld; //        tty_struct return 0; } 

рдЬрд┐рд╕реЗ tty_ldisc_get() :


 static struct tty_ldisc *tty_ldisc_get(struct tty_struct *tty, int disc) { struct tty_ldisc *ld; //    struct tty_ldisc_ops *ldops; //     ldops = get_ldops(disc); //      .   ,       .   - N_TTY ld = kmalloc(sizeof(struct tty_ldisc), GFP_KERNEL | __GFP_NOFAIL); ld->ops = ldops; //       ld->tty = tty; //    tty_struct   .          return ld; } 

рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдХреЙрд▓ рдХреЛ alloc_tty_struct() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХреА, рдЬреЛ рд▓рд╛рдЗрди рдЕрдиреБрд╢рд╛рд╕рди рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ tty_struct рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддрд╛ рд╣реИ - tty_ldisc рд╕рдВрд░рдЪрдирд╛ред рджреЛрдиреЛрдВ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕рдВрдмрдВрдз рд╣реИрдВред рдЖрдЗрдП рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред


  • tty_struct TTY рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 struct tty_struct { struct tty_driver *driver; //  TTY  const struct tty_operations *ops; //  .    ,   driver->ops,       int index; //   struct tty_ldisc *ldisc; //     struct tty_struct *link; //     PTY // ... } 

  • tty_ldisc рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ TTY рд▓рд╛рдЗрди рдХреЗ рдЕрдиреБрд╢рд╛рд╕рди рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рдлрд╝реАрд▓реНрдб рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:

 struct tty_ldisc { struct tty_ldisc_ops *ops; //    struct tty_struct *tty; //   tty_struct  .       }; 

рдпрд╣ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ? рдЖрдЗрдП рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХреА рдЧрдИ рд╕рднреА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╣рдорд╛рд░реА рдЯреЛрдХрд░реА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ рдЬреИрд╕реЗ рд╡реЗ рдХреЛрдб рдореЗрдВ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ:
tty_struct


рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдХреЗрд╡рд▓ PTM рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП tty_struct рдмрдирд╛рдпрд╛ред рдкреАрдЯреАрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо tty_init_dev() рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрддреЗ рд╣реИрдВ рдФрд░ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рддрдм tty_driver_install_tty() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ:


 /** * This method is responsible * for ensuring any need additional structures are allocated and configured. */ static int tty_driver_install_tty(struct tty_driver *driver, struct tty_struct *tty) { return driver->ops->install ? driver->ops->install(driver, tty) : tty_standard_install(driver, tty); } 

рдЯрд┐рдкреНрдкрдгреА рд╣рдореЗрдВ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╡рд┐рднрд┐рдиреНрди рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдкреАрдЯреАрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рд╣рдорд╛рд░реА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдЧреАред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмреЗрд╣рдж рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд░реНрдХ рд╣реИ, рдкреВрд░реА рдбрд┐рд╡рд╛рдЗрд╕ рд╣реИ, рди рдХрд┐ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдврд╛рдВрдЪрд╛! рд▓реЗрдХрд┐рди рд╣рдо рд╕рднреА рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рдбрд┐рд╡рд╛рдЗрд╕ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВред рдареАрдХ рд╣реИ, рдбреНрд░рд╛рдЗрд╡рд░ рдХреНрдпрд╛ рд╣реИ-> ops-> рдпрд╣рд╛рдБ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ ? рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, PTM рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВ:


 static const struct tty_operations ptm_unix98_ops = { .install = pty_unix98_install, // ... 

рдФрд░ рд╣рдо рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо pty_unix98_install() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:


 static int pty_unix98_install(struct tty_driver *driver, struct tty_struct *tty) { return pty_common_install(driver, tty, false); } 

рдЬреЛ pty_common_install() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ:


 static int pty_common_install(struct tty_driver *driver, struct tty_struct *tty, bool legacy) { struct tty_struct *o_tty; // tty_struct    PTY -    PTS  //    ,       install.   ,   PTM     tty_struct,        if (driver->subtype != PTY_TYPE_MASTER) return -EIO; o_tty = alloc_tty_struct(driver->other, idx); tty->link = o_tty; o_tty->link = tty; } 

, PTS tty_struct , PTS . . tty_struct PTS .





, TTY ( - ?).
тАФ , PTM, PTS :


 static const struct file_operations tty_fops = { .llseek = no_llseek, .read = tty_read, .write = tty_write, .poll = tty_poll, .unlocked_ioctl = tty_ioctl, .compat_ioctl = tty_compat_ioctl, .open = tty_open, .release = tty_release, .fasync = tty_fasync, .show_fdinfo = tty_show_fdinfo, }; 

, TTY .




. , /dev/ptmx . , PTS , , PTM , :





рдирдорд╕реНрддреЗ рд╡рд┐рд╢реНрд╡!


. "Hello, World!", .


 #include <stdio.h> void main() { printf("Hello, World!\n"); } 

, "Hello, World!" . , , , . , . stdout /dev/null тАФ . , Linux.


Unix write() , read() , close() , write() /dev/pts/0 __vfs_write() :


 ssize_t __vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos) { ssize_t ret; //... ret = file->f_op->write(file, buf, count, pos); //... return ret; } 

write() . , :


 static const struct file_operations tty_fops = { // ... .write = tty_write, // ... 

tty_write() :


 static ssize_t tty_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) { struct tty_struct *tty = file_tty(file); struct tty_ldisc *ld; ssize_t ret; ld = tty_ldisc_ref_wait(tty); ret = do_tty_write(ld->ops->write, tty, file, buf, count); tty_ldisc_deref(ld); return ret; } 

tty_struct TTY , write() . :


 static struct tty_ldisc_ops n_tty_ops = { .write = n_tty_write, // ... }; 

n_tty_write() :


 /** * n_tty_write - write function for tty * @tty: tty device * @file: file object * @buf: userspace buffer pointer * @nr: size of I/O */ static ssize_t n_tty_write(struct tty_struct *tty, struct file *file, const unsigned char *buf, size_t nr) { const unsigned char *b = buf; // b - ,       "Hello, World!".          int c; //    //     PTS ,  write()    0,  ,     while (nr > 0) { c = tty->ops->write(tty, b, nr); //  write()       TTY  if (!c) break; b += c; //     nr -= c; //      :  -  -  -  } } 

, "Hello, World!" write() PTS . :


 static const struct tty_operations pty_unix98_ops = { .write = pty_write, // ... } 

pty_write() :


 static int pty_write(struct tty_struct *tty, const unsigned char *buf, int c) { struct tty_struct *to = tty->link; //      PTY.    -  PTM  if (c > 0) { //    PTM  c = tty_insert_flip_string(to->port, buf, c); //     ,       if (c) { tty_flip_buffer_push(to->port); tty_wakeup(tty); } } return c; } 

:


  __vfs_write() -> // 1- :   tty_write() -> do_tty_write() -> n_tty_write() -> // 2- :   pty_write() // 3- :  

. , PTM . , .


, flip buffer . Flip buffer тАФ , . tty driver , . , . , , . , , . - flip buffer тАФ (, - , flip).


, . tty_insert_flip_string() tty_insert_flip_string_fixed_flag() , PTM :


 int tty_insert_flip_string_fixed_flag(struct tty_port *port, const unsigned char *chars, char flag, size_t size) { int copied = 0; do { int goal = min_t(size_t, size - copied, TTY_BUFFER_PAGE); //      int space = __tty_buffer_request_room(port, goal, flags); //     struct tty_buffer *tb = port->buf.tail; //       if (unlikely(space == 0)) break; memcpy(char_buf_ptr(tb, tb->used), chars, space); //      tb->used += space; copied += space; chars += space; /* There is a small chance that we need to split the data over several buffers. If this is the case we must loop */ } while (unlikely(size > copied)); return copied; } 

, flip buffer , , . , тАФ PTM , .


, "Hello, World!" PTM . GNOME Terminal Server poll() ( I/O) master . , ? рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреИрд╕реЗред , , тАФ .


tty_flip_buffer_push() ( pty_write):


 /** * tty_flip_buffer_push - terminal * @port: tty port to push * * Queue a push of the terminal flip buffers to the line discipline. * Can be called from IRQ/atomic context. * * In the event of the queue being busy for flipping the work will be * held off and retried later. */ void tty_flip_buffer_push(struct tty_port *port) { tty_schedule_flip(port); } 

tty_schedule_flip() , , :


 /** * tty_schedule_flip - push characters to ldisc * @port: tty port to push from * * Takes any pending buffers and transfers their ownership to the * ldisc side of the queue. It then schedules those characters for * processing by the line discipline. */ void tty_schedule_flip(struct tty_port *port) { struct tty_bufhead *buf = &port->buf; /* paired w/ acquire in flush_to_ldisc(); ensures * flush_to_ldisc() sees buffer data. */ smp_store_release(&buf->tail->commit, buf->tail->used); queue_work(system_unbound_wq, &buf->work); } 

, work (, - ) , тАФ , flush_to_ldisc() :


 static void flush_to_ldisc(struct work_struct *work) { struct tty_port *port = container_of(work, struct tty_port, buf.work); //   tty_port PTM . tty_port -       TTY  struct tty_bufhead *buf = &port->buf; struct tty_buffer *head = buf->head; // ... receive_buf(port, head); // ... } 

receive_buf() __receive_buf() , :


 static void __receive_buf(struct tty_struct *tty, const unsigned char *cp, char *fp, int count) { struct n_tty_data *ldata = tty->disc_data; bool preops = I_ISTRIP(tty) || (I_IUCLC(tty) && L_IEXTEN(tty)); if (ldata->real_raw) n_tty_receive_buf_real_raw(tty, cp, fp, count); else if (ldata->raw || (L_EXTPROC(tty) && !preops)) n_tty_receive_buf_raw(tty, cp, fp, count); else if (tty->closing && !L_EXTPROC(tty)) n_tty_receive_buf_closing(tty, cp, fp, count); else { if (ldata->lnext) { char flag = TTY_NORMAL; if (fp) flag = *fp++; n_tty_receive_char_lnext(tty, *cp++, flag); count--; } if (!preops && !I_PARMRK(tty)) n_tty_receive_buf_fast(tty, cp, fp, count); else n_tty_receive_buf_standard(tty, cp, fp, count); } if (read_cnt(ldata)) { kill_fasync(&tty->fasync, SIGIO, POLL_IN); wake_up_interruptible_poll(&tty->read_wait, EPOLLIN); } } 

, n_tty_receive_buf ( , _raw) read_buf , TTY . PTM raw , read_buf. , PTM PTS , .


, :


  ... pty_write() -> // 3- :  PTS  tty_insert_flip_string + tty_flip_buffer_push() -> tty_schedule_flip() -> --- //    PTM  flush_to_ldisc() -> // 2- :   PTM  receive_buf() -> n_tty_receive_buf -> n_tty_receive_buf_common -> __receive_buf() 

, PTM тАФ PTS .


: PTM . GNOME Terminal Server "Hello, World!", read() PTM . read() write() тАФ n_tty_read() . , , тАФ read_buf тАФ . GNOME Terminal Server X Server, .


, "Hello, World!" :


  -> PTY slave -> PTY master -> GNOME-TERMINAl-SERVER -> X Server -> ->  



рдирд┐рд╖реНрдХрд░реНрд╖


. :


  1. TTY
  2. ,

, ! - тАФ , !


рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ


Source: https://habr.com/ru/post/hi460257/


All Articles