Π’Π°Π±Π»ΠΈΡΠ° 2.1. ΠΠ½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ
has_arg| ΠΠ°ΠΊΡΠΎΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° | Π§ΠΈΡΠ»ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ | Π‘ΠΌΡΡΠ» |
|---|---|---|
no_argument | 0 | ΠΠΏΡΠΈΡ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ |
required_argument | 1 | ΠΠΏΡΠΈΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ |
optional_argument | 2 | ΠΡΠ³ΡΠΌΠ΅Π½Ρ ΠΎΠΏΡΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ |
Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΠΎΠΏΡΠΈΠΈ Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΊΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ. Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°Π²Π½Ρ Π½ΡΠ»Ρ. ΠΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ²:
getopt_long()ΠΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²ΡΡΡΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
flagvalwhile ((Ρ = 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;Β ... /* ΠΠ΄Π΅ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ */Β }}ΠΠΎΠ³Π΄Π°
flaggetopt_long()caseswitchint 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;Β ... /* ΠΠ΄Π΅ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ */Β }}ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ
optstringahvswitchcaseΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΡΠΎΡΠΊΠΎΠΉ ΠΎΠΏΡΠΈΠΈ Π±ΡΠ»Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ Π΄Π»ΠΈΠ½Π½Π°Ρ ΠΎΠΏΡΠΈΡ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²
flagval2.3.3.2. ΠΠ»ΠΈΠ½Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ Π² ΡΡΠΈΠ»Π΅ POSIX
Π‘ΡΠ°Π½Π΄Π°ΡΡ POSIX ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΡΠ΅Ρ ΠΎΠΏΡΠΈΡ
-W-WΠΡΠ»ΠΈ Π·Π°
Woptstringgetopt_long()-Wlongopt--longoptwhile ((Ρ =Β getopt_long(argc, argv, ":f:W;", longopts, NULL)) != -1) {Π‘ ΡΡΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ
-Wall--all-Wfile=myfile--file=myfile-Wgawk2.3.3 3. Π‘Π²ΠΎΠ΄ΠΊΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
getopt_long()Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΡΠ½ΠΎ, ΡΡΠΎ
getopt_long()Π’Π°Π±Π»ΠΈΡΠ° 2.2. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
getopt_long()| ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΠΊΠΎΠ΄ | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ |
|---|---|
| 0 | getopt_long() |
| 1 | optarg |
| '?' | ΠΠ΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΎΠΏΡΠΈΡ |
| ' ' | ΠΡΡΡΡΡΡΠ²ΡΡΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΎΠΏΡΠΈΠΈ |
| 'x' | Π‘ΠΈΠΌΠ²ΠΎΠ» ΠΎΠΏΡΠΈΠΈ 'x' |
| -1 | ΠΠΎΠ½Π΅Ρ ΠΎΠΏΡΠΈΠΉ |