بناء أداة CLI
مثال عملي
بناء أداة CLI درس مجاني في C Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C Academy 4 دروس في المجموع.
جمع الأجزاء معًا
سنجمع الآن الوسائط والخيارات والتحليل في أداة CLI صغيرة لكنها مكتملة.
مثالنا هو أداة لتنسيق الأعداد، تقرأ قيمة وبعض الخيارات، ثم تطبع نتيجة.
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: %s <number>\n", argv[0]);
return 1;
}
printf("You passed: %s\n", argv[1]);
return 0;
}تصميم الواجهة
تحدّد أدوات CLI الجيدة واجهتها مسبقًا. وستقبل أداتنا ما يلي:
-vلإخراج مطوّل-r Nلتكرار الإخراج N مرة- وساطة موضعية واحدة: النص المراد طباعته
#include <stdio.h>
int main(void) {
printf("Interface: prog [-v] [-r N] <text>\n");
return 0;
}تعريف الإعدادات
احتفظوا بكل سلوك قابل للتهيئة في متغير ذي قيمة افتراضية مناسبة. يفصل ذلك بين التحليل والعمل الفعلي.
#include <stdio.h>
int main(void) {
int verbose = 0;
int repeat = 1;
const char *text = NULL;
printf("defaults: verbose=%d repeat=%d\n", verbose, repeat);
return 0;
}التحليل باستخدام getopt
استخدموا getopt لملء قيم الرايات. تتطلب -r قيمة، ولذلك يكون إدخالها في سلسلة الخيارات هو r:.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int verbose = 0, repeat = 1, opt;
while ((opt = getopt(argc, argv, "vr:")) != -1) {
if (opt == 'v') verbose = 1;
else if (opt == 'r') repeat = atoi(optarg);
}
printf("verbose=%d repeat=%d\n", verbose, repeat);
return 0;
}قراءة الوساطة الموضعية
بعد getopt، يشير optind إلى أول وساطة غير خيارية. نأخذ النص من ذلك الموضع.
إذا لم توجد وساطة، نطبع طريقة الاستخدام ونخرج برمز خطأ.
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
while (getopt(argc, argv, "vr:") != -1) { }
if (optind >= argc) {
printf("Error: missing text argument\n");
return 1;
}
printf("text = %s\n", argv[optind]);
return 0;
}التحقق من الإدخال الرقمي
تتحقق الأداة المتينة من تلقي -r عددًا مناسبًا. ارفضوا أعداد التكرار الصفرية أو السالبة.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int repeat = 1, opt;
while ((opt = getopt(argc, argv, "r:")) != -1) {
if (opt == 'r') repeat = atoi(optarg);
}
if (repeat < 1) {
printf("Error: repeat must be >= 1\n");
return 1;
}
printf("repeat = %d\n", repeat);
return 0;
}تنفيذ المهمة
بعد تحليل الإعدادات والتحقق منها، نفّذوا المهمة الفعلية. نطبع النص هنا repeat من المرات.
#include <stdio.h>
int main(void) {
const char *text = "hello";
int repeat = 3;
for (int i = 0; i < repeat; i++) {
printf("%s\n", text);
}
return 0;
}الإخراج المطوّل
يمكن للراية المطوّلة إضافة معلومات تشخيصية. ضعوا عمليات الطباعة هذه خلف شرط الراية حتى يبقى الإخراج العادي نظيفًا.
#include <stdio.h>
int main(void) {
int verbose = 1;
const char *text = "hi";
if (verbose) printf("[debug] about to print text\n");
printf("%s\n", text);
return 0;
}الأداة الكاملة
إليكم البرنامج الكامل الذي يجمع كل الأجزاء: التحليل، ثم التحقق، ثم التنفيذ.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int verbose = 0, repeat = 1, opt;
while ((opt = getopt(argc, argv, "vr:")) != -1) {
if (opt == 'v') verbose = 1;
else if (opt == 'r') repeat = atoi(optarg);
}
if (optind >= argc) { printf("Usage: prog [-v] [-r N] <text>\n"); return 1; }
const char *text = argv[optind];
if (verbose) printf("[debug] repeat=%d\n", repeat);
for (int i = 0; i < repeat; i++) printf("%s\n", text);
return 0;
}رموز الخروج مهمة
تُبلغ أدوات CLI عن نجاحها من خلال رمز الخروج. أعيدوا 0 عند النجاح وقيمة غير صفرية عند حدوث أخطاء.
تعتمد البرامج النصية والبرامج الأخرى على ذلك لتحديد الإجراء التالي.
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("failure\n");
return 2;
}
printf("success\n");
return 0;
}كتابة الأخطاء إلى stderr
وفقًا للعرف، يذهب الإخراج العادي إلى stdout، بينما تذهب الأخطاء إلى stderr عبر fprintf(stderr, ...).
يتيح ذلك للمستخدمين فصل النتائج عن المعلومات التشخيصية عند إعادة توجيه الإخراج.
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
fprintf(stderr, "Error: need an argument\n");
return 1;
}
printf("%s\n", argv[1]);
return 0;
}تحقق سريع
اختبروا مدى فهمكم لاصطلاحات أدوات CLI.
مراجعة
بنيتم أداة CLI كاملة:
- حدّدوا الواجهة، وعرّفوا الإعدادات بقيم افتراضية.
- حلّلوا الرايات باستخدام
getopt؛ واقرؤوا الوسائط الموضعية منoptind. - تحققوا من المدخلات قبل تنفيذ المهمة.
- أعيدوا رموز خروج مفيدة، وأرسلوا الأخطاء إلى
stderr.
الأسئلة الشائعة
هل درس «بناء أداة CLI» مجاني؟
نعم — نص درس «بناء أداة CLI» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C Academy 4 دروس في المجموع.
ماذا ستتعلم في «بناء أداة CLI»؟
مثال عملي تتمرن على C Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C Academy؟
لا تُشترط خبرة سابقة. C Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «بناء أداة CLI»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C Academy هذا؟
نعم. كل درس في C Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- argc وargv
- تحليل الخيارات
- getopt
- بناء أداة CLI