AD

Messaggi di errore con la funzione perror in C

Come breve accennato nella pagina della funzione fprintf, in C è possibile scrivere su diversi stream, o più semplicemente, su diverse destinazioni di output. Ad esempio possiamo scrivere sullo stdout (standard output) o sullo stderr (standard error), che in entrambi i casi indicano lo schermo. Mentre lo stdout viene comunemente usato per stampare a schermo informazioni, dati o altro, lo stderr viene utilizzato per stampare a schermo gli errori generati.

In particolare, oltre alla fprintf che permette di indicare lo stream di dato da utilizzare, esiste una funzione creata apposta per stampare sullo stream stderr. Questa funzione si chiama perror e di seguito viene riportata la sua sintassi:

void perror(const char *msg);

dove msg è la stringa che viene stampata prima del testo dell’errore stesso. Infatti la funzione stampa a schermo l’ultimo errore riscontrato.

Esempio utilizzo della funzione perror in C

Di seguito vengono riportati alcuni esempi di utilizzo della funzione perror in C. Nello specifico usiamo la perror per stampare i messaggi di errore che possono accadere in diverse situazioni, come ad esempio durante l’apertura di un file.

#include <stdio.h> int main () {    FILE *fp;    fp = fopen("file.txt", "r");    if(fp == NULL) {       perror("Errore: ");       return -1;    }    fclose(fp);    return 0; } // Output: Errore: : No such file or directory

In questo caso, visto che il file "file.txt" non esiste, il programma non è in grado di aprirlo, di conseguenza il puntatore al file sarà nullo e la funzione perror stamperà sullo stderr (cioè lo schermo) il messaggio di cosa ha causato l’errore.

Ora consideriamo il caso in cui il file "file.txt" esiste, lo apriamo in modalità lettura, ma proviamo ad effettuare un’operazione di scrittura con la funzione fprintf. Chiaramente questa operazione non può essere svolta, infatti la fprintf restituirà -1 o EOF, quindi basta controllare che il valore di ritorno sia < 0 e utilizzare la funzione perror per stampare il messaggio di errore.

#include <stdio.h> int main () {     FILE *fp;     int val;          fp = fopen("file.txt", "r");     if(fp == NULL) {         perror("Errore: ");         return -1;     }     val = fprintf(fp, "ciao");     if(val < 0){         perror("Errore: ");     }     fclose(fp);     return 0; } // Output: Errore: Bad file descriptor