(рд▓реЗрдЦ рдСрдлрд╝рд▓рд╛рдЗрди рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ: рдорд╛рд░реНрдХрдбрд╛рдЙрди |
рдкреАрдбреАрдПрдл |
рдкреАрдбреАрдПрдл (рдкреНрд░рд┐рдВрдЯ) |
рдПрдЪрдЯреАрдПрдордПрд▓ )
рдХреНрдпреЛрдВ?
рд╣рдорд╛рд░реЗ рдЖрд╕рдкрд╛рд╕ рд╣рд░ рдХреЛрдИ рд▓рдЧрд╛рддрд╛рд░ рдХрд╣рддрд╛ рд╣реИ: тАЬрдХреНрдпрд╛ рдЖрдк рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреЗрд╢реЗрд╡рд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ? рджреЗрдЦреЗрдВ рдХрд┐ рджреВрд╕рд░реЗ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ! тАЭ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рд╕рд▓рд╛рд╣ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдореЗрд░реЗ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреЗ рдЕрдзреНрдпрдпрди рд╕рдорд╛рдкреНрдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ
рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рдФрд░ рдХреИрд╕реЗ рдХрд░рдирд╛
рд╕рд┐рдЦрд╛рдпрд╛ ред
рдЬреАрдПрдирдпреВ рдХреЛрд░реБрдЯрд┐рд▓реНрд╕ рдкреИрдХреЗрдЬ рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдореЗрдВ рд╕рдм рдХреБрдЫ рд╣реИ:
- рдХрдард┐рди рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВред
- рдмрдбрд╝рд╛ рдЬреАрд╡рди рдЪрдХреНрд░ред
- рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдЯреАрдоред
- рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛ рдХреЛрдб: рддреБрдЪреНрдЫ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐ рд╕реЗ рд╕реБрдкрд░-рдкрд░рд┐рд╖реНрдХреГрдд рд╕реЗрдб рддрдХ, рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ wc рд╕реЗ mkdir OS рдХреЗ рдХрд░реАрдмред
GNU Coreutils
GNU Core Utilites рдореВрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ: рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдирд╛, рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрди рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рдХрд┐рд╕реА рднреА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕реЗ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ: рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП
рд╕рд┐рдЧреНрд╡рд┐рди рд╣реИ, рд▓реЗрдХрд┐рди * рдирд┐рдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред
POSIX рдорд╛рдирдХ, рдЬреЛ Coreutils рдХрд╛
рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдХрд╛рдо рдХреА рдПрдХрд░реВрдкрддрд╛
рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред Coreutils рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдЬреИрд╕реЗ рдмрд┐рд▓реНрд▓реА, рдкреВрдВрдЫ, рдЧреВрдВрдЬ, wc рдФрд░ рдХрдИ рдЕрдиреНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪрд▓реЛ рд╕рдмрд╕реЗ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪреБрдиреЗрдВ рдЬрд┐рд╕реЗ рд╣рд╛рдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреА рд╕рд░рд▓рддрд╛ рдЖрдкрдХреЛ рдХреЛрд░реБрдЯрд┐рд▓реНрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯреВрд▓ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧреАред
рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣рд╛рдБ
рдЬреИрд╕рд╛ рдХрд┐
рдореИрдирд╛ рдХрд╣рддреА рд╣реИ, рд╣рд╛рдВ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЬреЛ рдХрд░ рд╕рдХрддреА рд╣реИ рд╡рд╣ рд╣реИ рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ "yn" рдХреЛ stdout рдХрд░рдирд╛ред рдпрджрд┐ рд╣рдо рд╣рд╛рдБ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ "y" рдХреЗ рдмрдЬрд╛рдп, рд╣рд╛рдБ рдПрдХ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдВрдЧреЗред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣рд░ рдХрд┐рд╕реА рдиреЗ рд▓рд┐рдЦрд╛ рдерд╛ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╕реАред рдХрд╛ рдЕрдзреНрдпрдпрди рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ рдХрд┐ рдЬреАрдПрдирдпреВ рд╕реЗ рдЧрдВрднреАрд░ рджрд╛рдврд╝реА рд╡рд╛рд▓реЗ рдЪрд╛рдЪрд╛ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рд╛рдБ,
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдереЛрдбрд╝рд╛ рд╕рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛
рд╣реИ ред
рд╕реНрд░реЛрдд рдХреЛрдб
рд╣рдо рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕реЗ рдпрд╛ рддреЛ
apt-get source
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреЗрдВрдЧреЗ: рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдкрд░рд┐рдЪрд┐рдд рд╣реИред
- рдХреЛрд░реБрдЯрд┐рд▓реНрд╕:
git clone git://git.sv.gnu.org/coreutils
- Gnulib (рдХрдИ рдмрд╛рд░ рджреЗрдЦреЗрдВ):
git clone git://git.savannah.gnu.org/gnulib.git
рд╕реНрд░реЛрдд рдХреЛрдб рд╣рд╛рдБ рдПрдХ
coreutils/src/yes.c
рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЦреЛрд▓реЗрдВред
рдХреЛрдбрд┐рдВрдЧ рд╢реИрд▓реА
рдкрд╣рд▓реА рдмрд╛рдд рдЬрд┐рд╕ рдкрд░ рдЖрдк рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ рд╡рд╣ рд╣реИ рдХреЛрдб рдХрд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╕реНрд╡рд░реВрдкрдгред рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рд╕рдВрдмрдВрдзрд┐рдд GNU рдХреЛрдбрд┐рдВрдЧ рдорд╛рдирдХ
рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╡рд╛рдкрд╕реА рдорд╛рди рдХрд╛ рдкреНрд░рдХрд╛рд░ рдПрдХ рдЕрд▓рдЧ рд▓рд╛рдЗрди рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рдУрдкрдирд┐рдВрдЧ рдмреНрд░реИрдХреЗрдЯ:
int main (int argc, char **argv) { foo(); ... }
рдХреЗрд╡рд▓ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдФрд░ рд╕рдВрд░реЗрдЦрдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдХреЗ рдмреАрдЪ, рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдореЗрдВ рдЕрдВрддрд░ 2 рд╕реНрдерд╛рди рд╣реИред рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рдХреГрдд рд░реВрдк рд╣реЛрддрд╛ рд╣реИ:
if (x < foo (y, z)) haha = bar[4] + 5; else { while (z) { haha += foo (z, z); z--; } return ++x + bar (); }
12 рд▓рд╛рдЗрдиреЗрдВ
yes.c
рд╕рднреА GPL рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдореЗрд░реА рдЖрдВрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реНрдердирд╛ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рдФрд░ рдЙрдирдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд░рд╣рд╕реНрдп рдереАред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдкрд╛рда GPL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ
рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рдЬреЛ рдХреЛрдИ рднреА рдЬреАрдкреАрдПрд▓ рдХреЗ рддрд╣рдд рдЕрдкрдиреЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЛ рдЬрд╛рд░реА рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЙрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд░реЛрдд рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХреЙрдкреА-рд░рд╛рдЗрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреА рдЗрди 12 рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
initialize_main
рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддреА рд╣реИ, рд╡рд╣ рд╣реИ
initialize_main
ред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рддрд░реНрдХреЛрдВ рдкрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, Coreutils рдореЗрдВ рдПрдХ рднреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧреА рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдЧреАред рд╣рд░ рдЬрдЧрд╣ рд╕реНрдЯрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ,
coreutils/src/system.h
рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
#ifndef initialize_main # define initialize_main(ac, av) #endif
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдирд╛рдо
Coreutils рдЙрдкрдпреЛрдЧрд┐рддрд╛рдПрдБ рджреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд╛рдореЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддреА рд╣реИрдВ:
- рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдирд╛рдо рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
- рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╛рдоред
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
user@laptop:~$ yes --version yes (GNU coreutils) 8.5 Usage: yes [STRING]... or: yes OPTION
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдирд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рдирд╛рдо рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:
user@laptop:~$ /usr/bin/yes --version yes (GNU coreutils) 8.5 user@laptop:~$ cp /usr/bin/yes ./foo user@laptop:~$ ./foo --version yes (GNU coreutils) 8.5
рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░
PROGRAM_NAME
рдореИрдХреНрд░реЛ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
#define PROGRAM_NAME "yes"
рдЕрд╕рд▓реА рдирд╛рдо рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪрд╛рд▓ рдХреЗ
argv[0]
рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
user@laptop:~$ yes --help Usage: yes [STRING]... or: yes OPTION user@laptop:~$ /usr/bin/yes --help Usage: /usr/bin/yes [STRING]... or: /usr/bin/yes OPTION
argv[0]
рдХрд╛ рдорд╛рди
main
рдХреА рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдореЗрдВ
set_program_name
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░
program_name
рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ:
set_program_name (argv[0])
set_program_name
рдлрд╝рдВрдХреНрд╢рди
Gnulib рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб
gnulib/lib/
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ,
progname.h
рдФрд░
progname.c
ред рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐
set_program_name
рди рдХреЗрд╡рд▓
argv[0]
рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ
progname.h
рдореЗрдВ рдШреЛрд╖рд┐рдд рд╡реИрд╢реНрд╡рд┐рдХ рд╡реИрд░рд┐рдПрдмрд▓
program_name
рдореЗрдВ
program_name
, рдмрд▓реНрдХрд┐
program_name
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдкреЗрдЪреАрджрдЧрд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдкрд╛рдВрддрд░рдг рднреА рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИред
рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг
Coreutils рдХрд╛ рдЙрдкрдпреЛрдЧ рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛
GNU рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рдкреИрдХреЗрдЬ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рдиреНрдпреВрдирддрдо рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИред рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдереЛрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреИрдХреЗрдЬ GNU рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдлреИрд▓рд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╕рдВрджреАрджрд╛ Django рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЧреЗрдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдЪреМрдЦрдЯреЗ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
рд╣реИрдмрд░ рдкрд░ рд▓рд┐рдЦрд╛ рд╣реИред
рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рдХреА рдорд╣рд╛рди рд╕рдВрдкрддреНрддрд┐ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рдЧрднрдЧ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реА рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИред рдПрдХ рдорд╛рдирдХ рдЬрд╛рджреВ рдлрд╝рдВрдХреНрд╢рди
_
, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ
usage
рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
void usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n"), program_name); ... }
_
рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░рд┐рдЪрд┐рдд
system.h
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ:
#define _(msgid) gettext (msgid)
рдХреЛрд░реБрдЯрд┐рд▓реНрд╕ рдореЗрдВ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рддрдВрддреНрд░ рдХрд╛ рдЖрд░рдВрдн
main
рддреАрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмреБрд▓рд╛рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE);
- setlocale рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдерд╛рдиреАрдп рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ
- bindtextdomain рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕рдВрджреЗрд╢ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╡рд╛рдж рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрд╣рд╛рдБ рджреЗрдЦрдирд╛ рд╣реИ
- рдЯреЗрдХреНрд╕рдЯреЛрдореИрди рд╡рд░реНрддрдорд╛рди рд╕рдВрджреЗрд╢ рдбреЛрдореЗрди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ
рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐
main
рдХреЛрдб рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реБрдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ:
atexit (close_stdout)
рд╕рд╣рдЬ рд░реВрдк рд╕реЗ, рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐
close_stdout
рдлрд╝рдВрдХреНрд╢рди рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рд╣рдо рдХреБрдЫ рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд╡рд░рдгрдХ рдХреЗ рд╕рд╛рде
stdout
рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрдлрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рддреА рд╣реИред
рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХ
рдпрд╣ рдЖрдЦрд┐рд░реА рд╕рд╡рд╛рд▓ рд╣реИ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдХрд╛рдо рдХреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ, рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕рдордп-рдкрд░реАрдХреНрд╖рдгрд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХреНрд░реЙрд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдкрд╛рдпрдерди рдореЗрдВ ) -
рдЧреЗрдЯрдЯреЙрдк рдореЙрдбреНрдпреВрд▓ред рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд▓реВрдк рдореЗрдВ
getopt
рдпрд╛
getopt_long
рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЖрдк рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ getopt рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдм рдкрд░ рднреА рд▓рд┐рдЦрд╛ рд╣реИред
Gnulib рдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рд╣реИ,
parse_long_options
рдЧрдпрд╛ рд╣реИ, рдЬреЛ рддрд░реНрдХреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП
--version
рдФрд░
--help
, рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА GNU рдПрдкреНрд▓рд┐рдХреЗрд╢рди
рдХреЛ рд╕рдорд░реНрдерди
рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред рдпрд╣
gnulib/lib/long-options.c
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ
gnulib/lib/long-options.c
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рд╣рд╛рдБ рд╕реНрд░реЛрдд рдХреЛрдб рдПрдХ рд╢рд╛рдВрдд getopt рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЗрд╕реА рд╕рдордп, рджрд░реНрдЬрдиреЛрдВ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрдЯрд┐рд▓рддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рднреА рдЧреЗрдЯрдЕрдк рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ,
parse_long_options
рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛
parse_long_options
ред рдлрд┐рд░ рдпрд╣ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдХреЛрдИ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рдХрд▓реНрдк рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╢реЗрд╖ рддрд░реНрдХ, рдпрджрд┐ рдХреЛрдИ рд╣реИрдВ, рддреЛ рдмрд╕ рдордирдорд╛рдирд╛ рддрд╛рд░ рд╣реИрдВ:
parse_long_options (argc, argv, PROGRAM_NAME, PACKAGE_NAME, Version, usage, AUTHORS, (char const *) NULL); if (getopt_long (argc, argv, "+", NULL, NULL) != -1) usage (EXIT_FAILURE);
рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рд░реВрд╕реА рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: "рдЕрдЧрд░ --version рдФрд░ --help рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рддрд░реНрдХреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдерд╛, рддреЛ рд╣рдо" y "рдХреЛ stdout рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВрдЧреЗ":
if (argc <= optind) { optind = argc; argv[argc++] = bad_cast ("y"); }
argv[argc]
рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ: ANSI C рдорд╛рдирдХ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐
argv[argc]
рддрддреНрд╡ рдПрдХ рд╢реВрдиреНрдп рд╕реВрдЪрдХ рд╣реЛред
рдореБрдЦреНрдп рдЪрдХреНрд░
рдареАрдХ рд╣реИ, рд╣рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдмрд╣реБрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ рд╣реИред рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реИ:
while (true) { int i; for (i = optind; i < argc; i++) if (fputs (argv[i], stdout) == EOF || putchar (i == argc - 1 ? '\n' : ' ') == EOF) error (EXIT_FAILURE, errno, _("standard output")); }
рдпрд╣рд╛рдВ рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ
if
рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдВрджрд░ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП, рдХреЗрд░реНрдирд┐рдЧрди рдФрд░ рд░рд┐рдЪреА рдиреЗ рдЭреВрда рдирд╣реАрдВ рдмреЛрд▓рд╛ рдЬрдм рдЙрдиреНрд╣реЛрдВрдиреЗ рд▓рд┐рдЦрд╛ рдХрд┐ рдПрдХ рдЕрдиреБрднрд╡реА рд╕реА-рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдирдХрд▓ рд▓рд╛рдЗрдиреЛрдВ рдХреА рддрд░рд╣ рд╣реИ:
while (*dst++ = *src++) ;