ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΌΡ ΡΠ»ΡΡΡΠΈΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠΊΠ°Π·Π°Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ
switch
int do_all, do_help, do_verbose; /* ΡΠ»Π°Π³ΠΎΠ²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ */
char *myfile, *user; /* ΡΠ°ΠΉΠ» Π²Π²ΠΎΠ΄Π°, ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ */
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 },
Β { "user" , optional_argument, NULL, 'u'},
Β { 0, 0, 0, 0 }
};
...
while((c=getopt_long(argc, argv, ":ahvf:u::W;", longopts, NULL)) != -1) {
Β switch (c) {
Β case 'a':
Β do_all = 1;
Β break;
Β case 'f':
Β myfile = optarg;
Β break;
Β case 'h':
Β do_help = 1;
Β break;
Β case 'u':
Β if (optarg != NULL)
Β Β user = optarg;
Β else
Β Β user = "root";
Β break;
Β case 'v':
Β do_verbose = 1;
Β break;
Β case 0:
Β /* getopt_long() ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ» ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ */
Β break;
#if 0
Β case 1:
Β /*
Β Β * ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎΡ case, Π΅ΡΠ»ΠΈ getopt_long() Π΄ΠΎΠ»ΠΆΠ½Π°
Β Β * ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊ
Β Β * optstring Π²Π΅Π΄ΡΡΠΈΠΉ * ΡΠΈΠΌΠ²ΠΎΠ» '-'. ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄,
Β Β * Π΅ΡΠ»ΠΈ ΠΎΠ½ Π΅ΡΡΡ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π·Π΄Π΅ΡΡ.
Β Β */
Β break;
#endif
Β case ':': /* ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΎΠΏΡΠΈΠΈ */
Β fprintf(stderr, "%s: option '-%c' requires an argument\n",
Β Β argv[0], optopt);
Β break;
Β case '?':
Β default: /* Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΎΠΏΡΠΈΡ */
Β fprintf(stderr, "%s: option '-%c' is invalid: ignored\n",
Β Β argv[0], optopt);
Β break;
Β }
}
Π ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Ρ ΠΎΡΠ΅ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΎΠΏΡΠΈΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΠΎΠ±ΡΡΡΠ½ΡΡΡΠΈΠ΅ ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΎΠΏΡΠΈΠΈ, ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΠΆΠ΅ Π½Π΅ ΡΠ°ΠΊ Π½ΡΠΆΠ½Ρ. (Π‘ΡΠ°Π²Π½ΠΈΡΠ΅
do_verbose
vflag
2.3.3.4. GNU
getopt()
getopt_long()
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Ρ ΠΎΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ GNU
getopt()
getopt_long()
getopt.h
getopt.Ρ
getopt1.c
COPYING.LIB
getopt.h
getopt.Ρ
getopt1.Ρ
ΠΠΊΠ»ΡΡΠΈΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² ΡΠ²ΠΎΠΉ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ² ΠΈ ΠΎΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠΉΡΠ΅ ΠΈΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ. Π ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌ
getopt_long()
#include <getopt.h>
#include "getopt.h"
-I
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°ΡΡΡΡ: Β«ΠΠΎΡ ΡΠ°ΠΊ, Ρ ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ GNU/Linux. ΠΠΎΡΠ΅ΠΌΡ Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡΡΠ°ΡΡ
getopt_long()
$ <b>uname -Π°</b> /* ΠΠΎΠΊΠ°Π·Π°ΡΡ ΠΈΠΌΡ ΠΈ ΡΠΈΠΏ ΡΠΈΡΡΠ΅ΠΌΡ */
Linux example 2.4.18-14 #1 Wed Sep 4 13:35:50 EDT 2002 i686 i686 i386 GNU/Linux
$ <b>ls -l getopt.ΠΎ getopt1.ΠΎ</b> /* ΠΠΎΠΊΠ°Π·Π°ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² */
-rw-r--r-- 1 arnold devel 9836 Mar 24 13:55 getopt.ΠΎ
-rw-r--r-- 1 arnold devel 10324 Mar 24 13:55 getopt1.ΠΎ
$ <b>size getopt.ΠΎ getopt1.ΠΎ</b> /* ΠΠΎΠΊΠ°Π·Π°ΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ
ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ°Π·ΠΌΠ΅ΡΡ */
text data bss dec hex filename
0 0 0 0 0 getopt.ΠΎ
0 0 0 0 0 getopt1.ΠΎ
ΠΠΎΠΌΠ°Π½Π΄Π°
size