рд╢реБрдн рджреЛрдкрд╣рд░, рд╣реНрд░рдЬрд╝рд┐рддрд▓реАред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдХреНрдпрд╛ рд╕рдВрдХреЗрдд рд╣реИрдВ рдФрд░ рд╡реЗ рдХрд┐рд╕ рд▓рд┐рдП рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрдЬ, рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЙрдирдХрд╛ рдЕрдкрд░рдВрдкрд░рд╛рдЧрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧред
рдпрд╣ рдХрд╛рд░реНрдп рдмрд╣реБрдд рджреВрд░ рдХреА рдХреМрдбрд╝реА рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рдВрдХреЗрддреЛрдВ рдФрд░ рдереЛрдбрд╝рд╛ рд╕рд╛, рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдиреЗ рдХреМрд╢рд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрд╛рд░реНрдп:
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрдкреЙрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХреЗрд╡рд▓ рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреИрд░реЗрдВрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдЕрднрд┐рднрд╛рд╡рдХ рдкрд░рд┐рдгрд╛рдореА рдлрд╛рдЗрд▓ рдХреЛ рд╕реНрдЯрдбрдЖрдЙрдЯ рдореЗрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИредрд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рд╣рдо рдореЛрд░реНрд╕ рдХреЛрдб рдЬреИрд╕реЗ рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреЗрд╡рд▓
SIGUSR1 рдФрд░
SIGUSR2 рдХрд╛ рдЙрдкрдпреЛрдЧ "рдкреНрд╡рд╛рдЗрдВрдЯ" рдФрд░ "рдбреИрд╢" рдХреЗ рдмрдЬрд╛рдп
рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред
рдирд┐рд░реНрдгрдп
рд╣рдо
SIGUSR2 рдФрд░
SIGUSR1 рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрд┐рдЯ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ
SIGUSR2 - рд╢реВрдиреНрдп рд╕реЗ рдереЛрдбрд╝рд╛ рд╕рд╛,
SIGUSR1 - рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╕рд╛ред
рдбреЗрдЯрд╛ рднреЗрдЬ рд░рд╣рд╛ рд╣реИ
рдЪрд░
рд╕реА рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдмрд╛рдЗрдЯ рдкрдврд╝реЗрдВред
рдХрд╛рдЙрдВрдЯрд░ рд╡реЗрд░рд┐рдПрдмрд▓ 0b10000000 рдпрд╛ 128 рдХреЗ рдмрд░рд╛рдмрд░ рдмрдирд╛рдПрдВред
рдпрджрд┐
c рдФрд░ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рдмрд┐рдЯ рд╡рд╛рдЗрдЬ рдФрд░")
рдХрд╛рдЙрдВрдЯрд░ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рд╣рдо SIGUSR1 рднреЗрдЬрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╣рдо SIGUSR2 рднреЗрдЬрддреЗ рд╣реИрдВред
рд╣рдо рдЖрдзреЗ рдореЗрдВ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рд╣рдореЗрдВ 0b01000000 рдпрд╛ 64 рдорд┐рд▓рддрд╛ рд╣реИ), рдпрд╛рдиреА рд╣рдо рдмрд╛рдИрдВ рдУрд░ рджреВрд╕рд░реЗ рдмрд┐рдЯ рдореЗрдВ рдкрд╛рд╕ рд╣реЛрддреЗ рд╣реИрдВред
рдХрд╛рдЙрдВрдЯрд░ рд╢реВрдиреНрдп рд╣реЛрдиреЗ рддрдХ рджреЛрд╣рд░рд╛рдПрдВред рдлрд┐рд░ рд╣рдо рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдирдИ рдмрд╛рдЗрдЯ рдкрдврд╝рддреЗ рд╣реИрдВред
рд╕реА рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
while (read(fd, &c, 1) > 0) { for ( i = 128; i >= 1; i /= 2) { if ( i & c )
рдбреЗрдЯрд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд
рд╣рдо рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓__рдЪрдХреНрд░ рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рд╢реБрд░реВ рдореЗрдВ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ред
рдЬрдмрдХрд┐
рдХрд╛рдЙрдВрдЯрд░ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ, рд╣рдо рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
рдпрджрд┐
SIGUSR1 рдЖрдпрд╛ рд╣реИ, рддреЛ
out_char + = рдХрд╛рдЙрдВрдЯрд░ , рдлрд┐рд░
рдХрд╛рдЙрдВрдЯрд░ / = 2 ред
рдЕрдЧрд░
SIGUSR1 рдЖрдпрд╛, рддреЛ
рдХрд╛рдЙрдВрдЯрд░ / = 2 ред
рд╣рдо рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рд▓рд┐рдЦреЗрдВрдЧреЗ:
рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк
рдЕрдм рдЖрдкрдХреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдпрд╛ рдмрдЪреНрдЪреЗ рдХреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдореМрдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдмрдЪреНрдЪрд╛ рдорд░ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ
SIGCHLD рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред
рдпрд╣ рдмрдЪреНрдЪреЗ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрдЧрд╛, рдЗрд╕рдореЗрдВ рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмрдЪреНрдЪреЗ рдХреЛ рдЙрд╕рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рдореГрддреНрдпреБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХрд░реНрдиреЗрд▓ рд╕реЗ рд╣рдореЗрдВ
SIGALRM рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП
рдХрд╣рддреЗ рд╣реИрдВ рдпрджрд┐ рдХрд┐рд╕реА рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдХреЗ рдмрд╛рдж рдХреЛрдИ рдЕрдиреНрдп рд╕рдВрдХреЗрдд рд╣рдореЗрдВ рдирд╣реАрдВ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕реЗ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рд▓реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
while (read(fd, &c, 1) > 0) {
рдорд╛рддрд╛-рдкрд┐рддрд╛ рджреНрд╡рд╛рд░рд╛ рдмрдЪреНрдЪреЗ рд╕реЗ рд╕рдВрдХреЗрдд рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдЬреЛрдбрд╝реЗрдВред рдпрд╣реА рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдмрд┐рдЯ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХреА рдкреБрд╖реНрдЯрд┐ рдирд╣реАрдВ рдХрд░рддреЗ, рддрдм рддрдХ рдмрдЪреНрдЪрд╛ рдЕрдЧрд▓реЗ рдПрдХ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдпрд╣ рдХреЗрд╡рд▓
рдПрдХ рдФрд░
рд╢реВрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдо рдПрдХ рд╕рдВрдХреЗрдд
SIGUSR1 рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
рджреЗрдВрдЧреЗ ред рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рдж, рдХрд╛рд░реНрдп рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ:
рдФрд░ рдмрдЪреНрдЪреЗ рдХреА рдкреБрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
sigsuspend (рдФрд░ рд╕реЗрдЯ) рдЬреЛрдбрд╝реЗрдВ:
while (read(fd, &c, 1) > 0){
рдкреИрд░реЗрдВрдЯ рдХреА рдУрд░ рд╕реЗ рдХрдиреНрдлрд░реНрдореЗрд╢рди рд╕рд┐рдЧреНрдирд▓ рдЖрдиреЗ рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдлрдВрдХреНрд╢рди, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЦрд╛рд▓реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдирд╣реАрдВ рддреЛ рдбрд┐рдлреЙрд▓реНрдЯ рд╕рд┐рдЧреНрдирд▓, рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╢рди рдкрд░рдлреЙрд░реНрдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рд░реНрдп рдФрд░
рд╕реЗрдЯ :
рдорд╛рддрд╛-рдкрд┐рддрд╛ рдореЗрдВ, рд╕рд┐рдЧреНрдирд▓ рдорд╛рд╕реНрдХ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
рдЪреВрдВрдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рдПрдХ рдирдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛрдЧреА, рдЬреЛ рддреБрд░рдВрдд рд╣рдореЗрдВ рд╕рд┐рдЧреНрдирд▓ (рдбреЗрдЯрд╛),
рд╕рд┐рдЧрдкреНрд░реЛрдореИрдХреНрд╕ (SIG_BLOCK, рдФрд░ рд╕реЗрдЯ, NULL) рднреЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░
рджреЗрддреА рд╣реИ, рдХрд╛рдВрдЯреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рджреМрдбрд╝ рдкреНрд░рднрд╛рд╡ (рджреМрдбрд╝) рдХреЗ рдХрд╛рд░рдг рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдХрд╛ рдореМрдХрд╛ рд╣реИ рд╣рд╛рд▓рдд)ред
рдирддреАрдЬрддрди, рдХрд╛рд░реНрдпрдХреНрд░рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
int out_char = 0, counter = 128; pid_t pid;
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдЪ рд╣реИ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реИ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдХреЛрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!