ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΌΡ ΡΠ»ΡΡΡΠΈΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠΊΠ°Π·Π°Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ
switchint 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_verbosevflag2.3.3.4. GNU
getopt()getopt_long()ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Ρ ΠΎΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ GNU
getopt()getopt_long()getopt.hgetopt.Ρgetopt1.cCOPYING.LIBgetopt.hgetopt.Ρ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 filename0 0 0 0 0 getopt.ΠΎ0 0 0 0 0 getopt1.ΠΎΠΠΎΠΌΠ°Π½Π΄Π°
size