0Pricing
C Academy · Lezione

Creare uno strumento CLI

Esempio pratico

Creare uno strumento CLI è una lezione C Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C Academy include 4 lezioni in totale.

Unire tutti gli elementi

Ora combiniamo argomenti, opzioni e analisi in un piccolo ma completo strumento CLI.

Il nostro esempio è un'utilità per la formattazione dei numeri che legge un valore e alcune opzioni, quindi stampa un risultato.

#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;
}

Progettazione dell'interfaccia

Un buon strumento CLI definisce in anticipo la propria interfaccia. Il nostro accetterà:

  • -v output dettagliato
  • -r N ripete l'output N volte
  • un argomento posizionale: il testo da stampare
#include <stdio.h>

int main(void) {
    printf("Interface: prog [-v] [-r N] <text>\n");
    return 0;
}

Dichiarazione delle impostazioni

Memorizzi ogni comportamento configurabile in una variabile con un valore predefinito sensato. In questo modo l'analisi rimane separata dal lavoro effettivo.

#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;
}

Analisi con getopt

Utilizzi getopt per valorizzare i flag. -r accetta un valore, quindi la relativa voce nella optstring è 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;
}

Lettura dell'argomento posizionale

Dopo getopt, optind punta al primo argomento non opzionale. Preleviamo da lì il testo.

Se non è presente, stampiamo le istruzioni per l'uso e usciamo con un codice di errore.

#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;
}

Convalida dell'input numerico

Uno strumento robusto verifica che -r abbia ricevuto un numero sensato. Rifiuti quantità di ripetizioni pari a zero o negative.

#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;
}

Esecuzione del lavoro

Dopo aver analizzato e convalidato le impostazioni, esegua l'attività effettiva. Qui stampiamo il testo repeat volte.

#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;
}

Output dettagliato

Il flag verbose può aggiungere informazioni diagnostiche. Racchiuda queste stampe in un controllo del flag, così l'output normale rimane pulito.

#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;
}

Lo strumento completo

Ecco il programma completo che unisce tutti gli elementi: analizzare, convalidare, quindi eseguire.

#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;
}

L'importanza dei codici di uscita

Gli strumenti CLI comunicano l'esito tramite il proprio codice di uscita. Restituisca 0 in caso di successo e un valore diverso da zero in caso di errore.

Gli script e gli altri programmi si basano su questo valore per decidere cosa fare successivamente.

#include <stdio.h>

int main(int argc, char *argv[]) {
    if (argc < 2) {
        printf("failure\n");
        return 2;
    }
    printf("success\n");
    return 0;
}

Scrittura degli errori su stderr

Per convenzione, l'output normale viene inviato a stdout e gli errori a stderr tramite fprintf(stderr, ...).

In questo modo gli utenti possono separare i risultati dalle informazioni diagnostiche quando reindirizzano l'output.

#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;
}

Verifica rapida

Verifichi la Sua comprensione delle convenzioni degli strumenti CLI.

Riepilogo

Ha creato uno strumento CLI completo:

  • Definisca l'interfaccia e dichiari le impostazioni con valori predefiniti.
  • Analizzi i flag con getopt; legga gli argomenti posizionali da optind.
  • Convalidi gli input prima di eseguire il lavoro.
  • Restituisca codici di uscita significativi e invii gli errori a stderr.

Domande Frequenti

La lezione «Creare uno strumento CLI» è gratuita?

Sì — il testo completo di «Creare uno strumento CLI» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C Academy, passa a CoddyKit PRO. Il corso C Academy include 4 lezioni in totale.

Cosa imparerò in «Creare uno strumento CLI»?

Esempio pratico Eserciti C Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C Academy?

Non è richiesta alcuna esperienza precedente. C Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Creare uno strumento CLI»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C Academy?

Sì. Ogni lezione C Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. argc e argv
  2. Analizzare le opzioni
  3. getopt
  4. Creare uno strumento CLI
← Torna a C Academy