Budowanie narzędzia CLI
Praktyczny przykład
Budowanie narzędzia CLI to bezpłatna lekcja C Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C Academy zawiera 4 lekcji w sumie.
Łączenie wszystkiego
Teraz połączymy argumenty, opcje i analizowanie w małe, ale kompletne narzędzie CLI.
Przykładem będzie narzędzie do formatowania liczb, które odczytuje wartość oraz kilka opcji, a następnie wyświetla wynik.
#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;
}Projektowanie interfejsu
Dobre narzędzia CLI definiują swój interfejs z wyprzedzeniem. Nasze będzie akceptować:
-v— szczegółowe dane wyjściowe-r N— powtórzenie danych wyjściowych N razy- jeden argument pozycyjny: tekst do wyświetlenia
#include <stdio.h>
int main(void) {
printf("Interface: prog [-v] [-r N] <text>\n");
return 0;
}Deklarowanie ustawień
Każde konfigurowalne zachowanie należy przechowywać w zmiennej z rozsądną wartością domyślną. Dzięki temu analizowanie jest oddzielone od właściwego działania programu.
#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;
}Analizowanie za pomocą getopt
Należy użyć getopt, aby wypełnić ustawienia flag. Opcja -r przyjmuje wartość, dlatego jej wpis w łańcuchu optstring to 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;
}Odczytywanie argumentu pozycyjnego
Po zakończeniu działania getopt zmienna optind wskazuje pierwszy argument niebędący opcją. Pobieramy stamtąd tekst.
Jeśli go nie ma, wyświetlamy sposób użycia programu i kończymy działanie z kodem błędu.
#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;
}Sprawdzanie danych liczbowych
Solidne narzędzie sprawdza, czy opcja -r otrzymała sensowną liczbę. Należy odrzucić zerową lub ujemną liczbę powtórzeń.
#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;
}Wykonywanie zadania
Po przeanalizowaniu i sprawdzeniu ustawień należy wykonać właściwe zadanie. W tym przykładzie wyświetlamy tekst repeat razy.
#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;
}Szczegółowe dane wyjściowe
Flaga szczegółowego trybu może dodawać informacje diagnostyczne. Takie wyświetlanie należy uzależnić od flagi, aby zwykłe dane wyjściowe pozostały przejrzyste.
#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;
}Kompletne narzędzie
Oto pełny program łączący wszystkie elementy: analizowanie, sprawdzanie, a następnie wykonanie.
#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;
}Kody zakończenia mają znaczenie
Narzędzia CLI komunikują powodzenie za pomocą kodu zakończenia. W przypadku powodzenia należy zwrócić 0, a w przypadku błędów wartość różną od zera.
Skrypty i inne programy korzystają z tego kodu, aby zdecydować, co zrobić dalej.
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("failure\n");
return 2;
}
printf("success\n");
return 0;
}Zapisywanie błędów na stderr
Zgodnie z konwencją zwykłe dane wyjściowe trafiają do stdout, a błędy do stderr za pośrednictwem fprintf(stderr, ...).
Pozwala to oddzielić wyniki od diagnostyki podczas przekierowywania danych wyjściowych.
#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;
}Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat konwencji dotyczących narzędzi CLI.
Podsumowanie
Zbudowali Państwo kompletne narzędzie CLI:
- Zdefiniuj interfejs i zadeklaruj ustawienia z wartościami domyślnymi.
- Analizuj flagi za pomocą
getopt; odczytuj argumenty pozycyjne od indeksuoptind. - Sprawdzaj dane wejściowe przed wykonaniem zadania.
- Zwracaj znaczące kody zakończenia i wysyłaj błędy do
stderr.
Często zadawane pytania
Czy lekcja „Budowanie narzędzia CLI” jest bezpłatna?
Tak — pełny tekst „Budowanie narzędzia CLI” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C Academy, przejdź na CoddyKit PRO. Kurs C Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Budowanie narzędzia CLI”?
Praktyczny przykład Ćwiczysz C Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C Academy?
Nie wymagamy żadnego doświadczenia. C Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Budowanie narzędzia CLI”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C Academy?
Tak. Każda lekcja C Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- argc i argv
- Parsowanie opcji
- getopt
- Budowanie narzędzia CLI