Π’Π°Π±Π»ΠΈΡΠ° 2.1. ΠΠ½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ
has_arg
ΠΠ°ΠΊΡΠΎΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° | Π§ΠΈΡΠ»ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ | Π‘ΠΌΡΡΠ» |
---|---|---|
no_argument | 0 | ΠΠΏΡΠΈΡ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ |
required_argument | 1 | ΠΠΏΡΠΈΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ |
optional_argument | 2 | ΠΡΠ³ΡΠΌΠ΅Π½Ρ ΠΎΠΏΡΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ |
Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΠΎΠΏΡΠΈΠΈ Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΊΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ. Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°Π²Π½Ρ Π½ΡΠ»Ρ. ΠΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ²:
getopt_long()
ΠΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²ΡΡΡΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
flag
val
while ((Ρ = getopt(argc, argv, ":af:hv")) != -1) {
Β switch (Ρ) {
Β case 'a':
Β do_all = 1;
Β break;
Β case 'f':
Β myfile = optarg;
Β break;
Β case 'h':
Β do_help = 1;
Β break;
Β case 'v':
Β do_verbose = 1;
Β break;
Β ... /* ΠΠ΄Π΅ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ */
Β }
}
ΠΠΎΠ³Π΄Π°
flag
getopt_long()
case
switch
int do_all, do_help, do_verbose; /* ΡΠ»Π°Π³ΠΎΠ²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ */
char *my_file;
struct option longopts[] = {
Β { "all", no_argument, &do_all, 1 },
Β { "file", required_argument, NULL, 'f' },
Β { "help", no_argument, &do_help, 1 },
Β { "verbose", no_argument, &do_verbose, 1 },
Β { 0, 0, 0, 0 }
};
while ((Ρ =
Β getopt_long(argc, argv, ":f:", longopts, NULL)) != -1) {
Β switch (c) {
Β case 'f':
Β myfile = optarg;
Β break;
Β case 0:
Β /* getopt_long() ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ,
Β Β Β ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ */
Β Β break;
Β ... /* ΠΠ΄Π΅ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ */
Β }
}
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ
optstring
a
h
v
switch
case
ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΡΠΎΡΠΊΠΎΠΉ ΠΎΠΏΡΠΈΠΈ Π±ΡΠ»Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ Π΄Π»ΠΈΠ½Π½Π°Ρ ΠΎΠΏΡΠΈΡ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²
flag
val
2.3.3.2. ΠΠ»ΠΈΠ½Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ Π² ΡΡΠΈΠ»Π΅ POSIX
Π‘ΡΠ°Π½Π΄Π°ΡΡ POSIX ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΡΠ΅Ρ ΠΎΠΏΡΠΈΡ
-W
-W
ΠΡΠ»ΠΈ Π·Π°
W
optstring
getopt_long()
-Wlongopt
--longopt
while ((Ρ =
Β getopt_long(argc, argv, ":f:W;", longopts, NULL)) != -1) {
Π‘ ΡΡΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ
-Wall
--all
-Wfile=myfile
--file=myfile
-W
gawk
2.3.3 3. Π‘Π²ΠΎΠ΄ΠΊΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
getopt_long()
Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΡΠ½ΠΎ, ΡΡΠΎ
getopt_long()
Π’Π°Π±Π»ΠΈΡΠ° 2.2. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
getopt_long()
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΠΊΠΎΠ΄ | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ |
---|---|
0 | getopt_long() |
1 | optarg |
'?' | ΠΠ΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΎΠΏΡΠΈΡ |
' ' | ΠΡΡΡΡΡΡΠ²ΡΡΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΎΠΏΡΠΈΠΈ |
'x' | Π‘ΠΈΠΌΠ²ΠΎΠ» ΠΎΠΏΡΠΈΠΈ 'x' |
-1 | ΠΠΎΠ½Π΅Ρ ΠΎΠΏΡΠΈΠΉ |