ΠΠΏΡΠΈΠΈ Π±ΡΠ²Π°ΡΡ Π΄Π²ΡΡ Π²ΠΈΠ΄ΠΎΠ².
β ΠΠΎΡΠΎΡΠΊΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ ΡΠΎΡΡΠΎΡΡ ΠΈΠ· Π΄Π΅ΡΠΈΡΠ° ΠΈ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° (ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π±ΡΠΊΠ²Π° Π² Π½ΠΈΠΆΠ½Π΅ΠΌ ΠΈΠ»ΠΈ Π²Π΅ΡΡ Π½Π΅ΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ΅). Π’Π°ΠΊΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ Π±ΡΡΡΡΠ΅Π΅ ΠΈ ΠΏΡΠΎΡΠ΅ Π½Π°Π±ΠΈΡΠ°ΡΡ.
β ΠΠ»ΠΈΠ½Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ ΡΠΎΡΡΠΎΡΡ ΠΈΠ· Π΄Π²ΡΡ Π΄Π΅ΡΠΈΡΠΎΠ², ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΡΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠΌΡ. ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ Π±ΡΠΊΠ²Ρ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΈ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΈ Π΄Π΅ΡΠΈΡΡ. Π’Π°ΠΊΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ Π»Π΅Π³ΡΠ΅ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡ ΠΈ ΡΠΈΡΠ°ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΡΡ ).
ΠΠ±ΡΡΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠ±Π΅ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΡΠΈΠΈ: ΠΏΠ΅ΡΠ²ΡΡ β Π΄Π»Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΈ, Π²ΡΠΎΡΡΡ β Π΄Π»Ρ ΡΡΠ½ΠΎΡΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠΏΡΠΈΠΈ -h ΠΈ --help ΠΈ ΡΡΠ°ΠΊΡΡΠ΅Ρ ΠΈΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΎΠΏΡΠΈΠΈ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΡΠ»Π΅ ΠΎΠΏΡΠΈΠΉ ΠΌΠΎΠ³ΡΡ ΠΈΠ΄ΡΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ ΠΈΠΌΠ΅Π½Π° Π²Ρ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠΈΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². Π’Π°ΠΊ, ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½Π°Ρ Π²ΡΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° ls -s / Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°. ΠΠΏΡΠΈΡ -s ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ls ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° (Π² ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡΠ°Ρ ) ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°. ΠΡΠ³ΡΠΌΠ΅Π½Ρ / Π·Π°Π΄Π°Π΅Ρ ΠΈΠΌΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°. ΠΠΏΡΠΈΡ --size ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΠΎΠΌ ΠΎΠΏΡΠΈΠΈ -s, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ° ΠΆΠ΅ ΡΠ°ΠΌΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π΄Π°Π½Π° ΡΠ°ΠΊ: ls -- size /.
Π Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ GNU Coding Standards ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ ΠΈΠΌΠ΅Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΎΠΏΡΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ GNU-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΡΠ²Π΅ΡΡΡΡΡΡ Ρ ΡΡΠΈΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠΌ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ, Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠΈΡ ΡΠ΅ΡΡ. ΠΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎΠΌΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ Linux-ΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°
% info "(standards)User Interfaces"
2.1.3. Π€ΡΠ½ΠΊΡΠΈΡ getopt_long()
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ β ΡΡΠΎΠΌΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ°. Π ΡΡΠ°ΡΡΡΡ. Π² GNU-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠ·ΡΠΊΠ° Π‘ Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ getopt_long(), ΡΠΏΡΠΎΡΠ°ΡΡΠ°Ρ Π΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΊΠΎΡΠΎΡΠΊΠΈΠ΅, ΡΠ°ΠΊ ΠΈ Π΄Π»ΠΈΠ½Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ. ΠΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ <getopt.h>.
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠΈ ΠΎΠΏΡΠΈΠΈ (ΡΠ°Π±Π». 2.1).
Π’Π°Π±Π»ΠΈΡΠ° 2.1. ΠΠΏΡΠΈΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΠΎΡΠΎΡΠΊΠ°Ρ ΡΠΎΡΠΌΠ° ΠΠ»ΠΈΠ½Π½Π°Ρ ΡΠΎΡΠΌΠ° ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ -h --help ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΏΡΠ°Π²ΠΊΠΈ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π²ΡΡ ΠΎΠ΄ -o ΠΈΠΌΡ_ΡΠ°ΠΉΠ»Π° --output ΠΈΠΌΡ_ΡΠ°ΠΉΠ»Π° ΠΠ°Π΄Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° -v --verbose ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, Π·Π°Π΄Π°ΡΡΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° Π²Ρ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²
Π€ΡΠ½ΠΊΡΠΈΠΈ getopt_long() Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π²Π΅ ΡΡΡΡΠΊΡΡΡΡ. ΠΠ΅ΡΠ²Π°Ρ β ΡΡΠΎ ΡΡΡΠΎΠΊΠ° Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΊΠΎΡΠΎΡΠΊΠΈΡ ΠΎΠΏΡΠΈΠΉ (ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΠΎΠ΄Π½ΠΎΠΉ Π±ΡΠΊΠ²ΠΎΠΉ). ΠΡΠ»ΠΈ ΠΎΠΏΡΠΈΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ Π½Π°Π»ΠΈΡΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΡΠ»Π΅ Π½Π΅Π΅ ΡΡΠ°Π²ΠΈΡΡΡ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΡΠΎΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΈΠ΄ ho:v. ΠΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠΏΡΠΈΠΈ -h, -ΠΎ ΠΈ -v, ΠΏΡΠΈΡΠ΅ΠΌ Π΄Π»Ρ Π²ΡΠΎΡΠΎΠΉ ΠΈΠ· Π½ΠΈΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ.
Π‘ΠΏΠΈΡΠΎΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π΄Π»ΠΈΠ½Π½ΡΡ ΠΎΠΏΡΠΈΠΉ Π·Π°Π΄Π°Π΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΡΡΡΠΊΡΡΡ option. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΡΠΈΠΈ ΠΈ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ΅ΡΡΡΠ΅Ρ ΠΏΠΎΠ»Π΅ΠΉ. Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠΌΡ ΠΎΠΏΡΠΈΠΈ (ΡΡΡΠΎΠΊΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π±Π΅Π· Π²Π΅Π΄ΡΡΠΈΡ Π΄Π΅ΡΠΈΡΠΎΠ²), Π²ΡΠΎΡΠΎΠ΅ β 1, Π΅ΡΠ»ΠΈ ΠΎΠΏΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΈ 0 β Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅: ΡΡΠ΅ΡΡΠ΅ β NULL; ΡΠ΅ΡΠ²Π΅ΡΡΠΎΠ΅ β ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°, Π·Π°Π΄Π°ΡΡΠ°Ρ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ Π΄Π°Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΠΎΠΏΡΠΈΠΈ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΎΠ΄Π½ΠΈ Π½ΡΠ»ΠΈ. ΠΠ°Ρ ΠΌΠ°ΡΡΠΈΠ² Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
const struct option long_options[] = {
{ "help", 0, NULL, 'h' },
{ "output", 1, NULL, 'o' },
{ "verbose", 0, NULL, 'v' },
{ NULL, 0, NULL, 0 }
};
Π€ΡΠ½ΠΊΡΠΈΠΈ getopt_long() ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ argc ΠΈ argv ΡΡΠ½ΠΊΡΠΈΠΈ main(). ΠΠΈΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Π΅Π΅ ΡΠ°Π±ΠΎΡΡ.
β ΠΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΡ getopt_long() Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΡΡ ΠΎΠΏΡΠΈΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ Π±ΡΠΊΠ²Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΡΠΎΡΠΊΠΎΠΌΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΡ ΠΎΠΏΡΠΈΠΈ. ΠΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΠΎΠΏΡΠΈΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ -1.
β ΠΠ±ΡΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΡ getopt_long() Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠΈΠΊΠ»Π΅ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π²ΡΠ΅Ρ ΠΎΠΏΡΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΡΠ±ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΠΏΡΠΈΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ switch.
β ΠΡΠ»ΠΈ ΠΎΠΏΡΠΈΡ getopt_long() ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΠΎΠΏΡΠΈΡ (Ρ.Π΅. ΠΎΠ½Π° Π½Π΅ ΡΠΊΠ°Π·Π°Π½Π° Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΊΠΎΡΠΎΡΠΊΠΈΡ ΠΈ Π΄Π»ΠΈΠ½Π½ΡΡ ΠΎΠΏΡΠΈΠΉ), ΠΎΠ½Π° Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ» ? (Π·Π½Π°ΠΊ Π²ΠΎΠΏΡΠΎΡΠ°). Π ΠΎΡΠ²Π΅Ρ Π½Π° ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ, ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Ρ ΡΠΏΡΠ°Π²ΠΊΡ ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ.
β ΠΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΎΠΏΡΠΈΠΈ, ΠΈΠΌΠ΅ΡΡΠ΅ΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ optarg ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΠΎΠΊΡ Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°.
β ΠΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ getopt_long() Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ Π°Π½Π°Π»ΠΈΠ· ΠΎΠΏΡΠΈΠΉ, Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ optind Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° argv, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, Π½Π΅ ΡΠ²Π»ΡΡΡΠΈΠΉΡΡ ΠΎΠΏΡΠΈΠ΅ΠΉ.
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 2.2 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ getopt_long().
ΠΠΈΡΡΠΈΠ½Π³ 2.2. (getopt_long.c) ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ getopt_long()#include <getopt.h>
#include <stdio.h>
#include <stdlib.h>
/* ΠΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. */
const char* program_name;
/* ΠΡΠ²ΠΎΠ΄ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΏΠΎΡΠΎΠΊ STREAM
(ΠΎΠ±ΡΡΠ½ΠΎ stdout ΠΈΠ»ΠΈ stderr) ΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ Ρ Π²ΡΠ΄Π°ΡΠ΅ΠΉ ΠΊΠΎΠ΄Π°
EXIT_CODE. ΠΠΎΠ·Π²ΡΠ°Ρ Π² ΡΡΠ½ΠΊΡΠΈΡ main() Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ */
void print_usage(FILE* stream, int exit_code) {
fprintf(stream, "Usage: %s options [ inputfile ... ]\n",
program_name);
fprintf(stream,
" -h --help Display this usage
information.\n"
" -ΠΎ --output filename Write output to file.\n"
" -v --verbose Print verbose messages.\n");
exit(exit_code);
}
/* Π’ΠΎΡΠΊΠ° Π²Ρ ΠΎΠ΄Π° Π² ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ARGC ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°Π·ΠΌΠ΅Ρ
ΡΠΏΠΈΡΠΊΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²; ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ARGV -- ΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ² ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ
Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. */
int main(int argc, char* argv[]) (
int next_option;
/* Π‘ΡΡΠΎΠΊΠ° Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΊΠΎΡΠΎΡΠΊΠΈΡ ΠΎΠΏΡΠΈΠΉ. */
const char* const short_options = "ho:v";
/* ΠΠ°ΡΡΠΈΠ² Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π΄Π»ΠΈΠ½Π½ΡΡ ΠΎΠΏΡΠΈΠΉ. */
const struct option long_options[] = {
{ "help", 0, NULL, 'h' },
{ "output", 1, NULL, 'o' },
{ "verbose", 0, NULL, 'v' },
{ NULL, 0, NULL, 0 } /* Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°. */
};
/* ΠΠΌΡ ΡΠ°ΠΉΠ»Π°, Π² ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΠ»ΠΈ NULL, Π΅ΡΠ»ΠΈ Π²ΡΠ²ΠΎΠ΄ Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΏΠΎΡΠΎΠΊ
stdout. */
const char* output_filename = NULL;
/* Π‘Π»Π΅Π΄ΡΠ΅Ρ Π»ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. */
int verbose = 0;
/* ΠΠ°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ ΠΈΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡΡΡ
Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ argv[0] */
program_name = argv[0];
do {
next_option =
getopt_long(argc, argv, short_options,
long_options, NULL);
switch(next_opt ion) {
case "h": /* -h ΠΈΠ»ΠΈ --help */
/* ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°ΠΏΡΠΎΡΠΈΠ» ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½ΡΠΆΠ½ΠΎ Π²ΡΠ²Π΅ΡΡΠΈ Π΅Π΅ Π² ΠΏΠΎΡΠΎΠΊ stdout ΠΈ Π·Π°Π²Π΅ΡΡΠΈΡΡ
ΡΠ°Π±ΠΎΡΡ Ρ Π²ΡΠ΄Π°ΡΠ΅ΠΉ ΠΊΠΎΠ΄Π° 0 (Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅). */
print_usage(stdout, 0);
case 'o': /* -ΠΎ ΠΈΠ»ΠΈ --output */
/* ΠΡΠ° ΠΎΠΏΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ -- ΠΈΠΌΡ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. */
output_filename = optarg;
break;
case 'v': /* -v ΠΈΠ»ΠΈ --verbose */
verbose = 1;
break;
case '?': /* ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π²Π΅Π» Π½Π΅Π²Π΅ΡΠ½ΡΡ ΠΎΠΏΡΠΈΡ. */
/* ΠΠ°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΏΠΎΡΠΎΠΊ
stderr ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΠΌ ΡΠ°Π±ΠΎΡΡ Ρ Π²ΡΠ΄Π°ΡΠ΅ΠΉ ΠΊΠΎΠ΄Π° 1
(Π°Π²Π°ΡΠΈΠΉΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅). */
print_usage(stderr, 1);
case -1: /* ΠΠΏΡΠΈΠΉ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅Ρ. */
break;
default: /* ΠΠ°ΠΊΠΎΠΉ-ΡΠΎ Π½Π΅ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. */
abort();
}
}
while (next_option != -1);
/* ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΠΏΡΠΈΠΉ Π·Π°Π²Π΅ΡΡΠ΅Π½Π°, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ OPTIND ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π°
ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, Π½Π΅ ΡΠ²Π»ΡΡΡΠΈΠΉΡΡ ΠΎΠΏΡΠΈΠ΅ΠΉ. Π Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ
ΡΠ΅Π»ΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ ΡΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, Π΅ΡΠ»ΠΈ Π·Π°Π΄Π°Π½ ΡΠ΅ΠΆΠΈΠΌ VERBOSE. */
if (verbose) {
int i;
for (i = optind; i < argc; ++i)
printf("Argument: %s\n", argv[i]);
}
/* ΠΠ°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΡΠ΅Π»ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ... */
return 0;
}