getopt_long(3)

الاسم
getopt_long - يُحلل خيارات سطر الأوامر

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#define _GNU_SOURCE
#include <getopt.h>

int getopt_long(int argc, char *argv[],
           const char *optstring,
           const struct option *longopts, int *longindex);

الوصف
تعمل الدالة getopt_long() مثل getopt(3) باستثناء أنها تقبل أيضًا خيارات طويلة، تبدأ بشرطتين. (إذا كان البرنامج يقبل الخيارات الطويلة فقط، فيجب تحديد optstring كسلسلة نصية فارغة ("")، وليس NULL.) يمكن اختصار أسماء الخيارات الطويلة إذا كان الاختصار فريدًا أو مطابقًا تمامًا لبعض الخيارات المحددة. قد يأخذ الخيار الطويل معاملًا، على الشكل --arg=param أو --arg param.

longopts هو مؤشر للعنصر الأول من مصفوفة من struct option مُصرح عنها في <getopt.h> كـ

    struct option {
        const char *name;
        int         has_arg;
        int        *flag;
        int         val;
    };

معاني الحقول المختلفة هي:

name
    هو اسم الخيار الطويل.

has_arg
    هو: no_argument (أو 0) إذا كان الخيار لا يأخذ معاملًا؛ أو required_argument (أو 1) إذا كان الخيار يتطلب معاملًا؛ أو optional_argument (أو 2) إذا كان الخيار يأخذ معاملًا اختياريًا.

flag
    يحدد كيفية إرجاع النتائج للخيار الطويل. إذا كان flag هو NULL، فإن getopt_long() تُرجع val. (على سبيل المثال، قد يضبط البرنامج المستدعِي val على محرف الخيار القصير المكافئ.) خلاف ذلك، تُرجع getopt_long() القيمة 0، ويشير flag إلى متغير يُضبط على val إذا عُثر على الخيار، ولكنه يُترك دون تغيير إذا لم يُعثر على الخيار.

val هي القيمة المراد إرجاعها، أو تحميلها في المتغير الذي يشير إليه flag.

يجب ملء العنصر الأخير من المصفوفة بالأصفار.

إذا لم يكن longindex هو NULL، فإنه يشير إلى متغير يُضبط على فهرس الخيار الطويل بالنسبة إلى longopts.

نظيره لـ optopt في getopt(3) هو “argv[(optind - 1)]”.

قيمة الإرجاع
انظر getopt(3).

تُرجع getopt_long() أيضًا محرف الخيار عند التعرف على خيار قصير. بالنسبة للخيار الطويل، فإنها تُرجع val إذا كان flag هو NULL، و 0 خلاف ذلك. قيم إرجاع الخطأ و -1 هي نفسها كما في getopt(3)، بالإضافة إلى '?' للمطابقة الغامضة أو المعاملات الزائدة.

البيئة
انظر getopt(3).

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
getopt_long() | سلامة الخيوط | غير آمن للمسارات المتعددة (MT-Unsafe) سباق:getopt env

المعايير
GNU.

أمثلة
يوضح البرنامج المثال التالي استخدام getopt_long() مع معظم ميزاتها.

    #include <getopt.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>

    int
    main(int argc, char *argv[])
    {
        int c;
        int digit_optind = 0;

        for (;;) {
            int this_option_optind = optind ? optind : 1;
            int option_index = 0;
            static struct option long_options[] = {
                {"add",     required_argument, 0,  0 },
                {"append",  no_argument,       0,  0 },
                {"delete",  required_argument, 0,  0 },
                {"verbose", no_argument,       0,  0 },
                {"create",  required_argument, 0, 'c'},
                {"file",    required_argument, 0,  0 },
                {0,         0,                 0,  0 }
            };

            c = getopt_long(argc, argv, "abc:d:012",
                            long_options, &option_index);
            if (c == -1)
                break;

            switch (c) {
            case 0:
                printf("option %s", long_options[option_index].name);
                if (optarg)
                    printf(" with arg %s", optarg);
                printf("\n");
                break;

            case '0':
            case '1':
            case '2':
                if (digit_optind != 0 && digit_optind != this_option_optind)
                  printf("digits occur in two different argv-elements.\n");
                digit_optind = this_option_optind;
                printf("option %c\n", c);
                break;

            case 'a':
                printf("option a\n");
                break;

            case 'b':
                printf("option b\n");
                break;

            case 'c':
                printf("option c with value '%s'\n", optarg);
                break;

            case 'd':
                printf("option d with value '%s'\n", optarg);
                break;

            case '?':
                break;

            default:
                printf("?? getopt returned character code 0%o ??\n", c);
            }
        }

        if (optind < argc) {
            printf("non-option ARGV-elements: ");
            while (optind < argc)
                printf("%s ", argv[optind++]);
            printf("\n");
        }

        exit(EXIT_SUCCESS);
    }

انظر أيضًا
getopt(1), getopt(3), getopt_long_only(3), getsubopt(3)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.