2011-10-26 7 views
8

non riesco a capire ciò che la biblioteca errno in C++ è per? Quali tipi di errori sono impostati in esso e come faccio a sapere quale numero indica quale errore?Come faccio a utilizzare errno in C++

influisce l'esecuzione del programma?

+0

Prendere qualsiasi pagina man e guardare la sezione "Errori", ad es. http://linux.die.net/man/3/open. Tutte le macro 'E *' sono valori 'errno' conterranno in caso di errore. – wormsparty

risposta

9

errno.h fa parte del C sottoinsieme di C++. Viene utilizzato dalla libreria C e contiene codici di errore. Se una chiamata a una funzione fallisce, la variabile "errno" viene impostata in modo corrispondente all'errore.

E sarà di alcuna utilità se si sta utilizzando la libreria C++ standard.

In C si hanno funzioni che si traducono errno codici a C-stringhe.

Per esempio in C funziona in questo modo:

int result = call_To_C_Library_Function_That_Fails(); 

if(result != 0) 
{ 
    char buffer[ 256 ]; 
    char * errorMessage = strerror_r(errno, buffer, 256); // get string message from errno 

    // ... 
} 

potrebbe essere necessario è, naturalmente, in C++ quando si utilizza la libreria C o la vostra libreria di sistema operativo che è in C. Per esempio, se si stiamo usando l'API sys/socket.h nei sistemi Unix.

Con C++, se si sta eseguendo un wrapper su una chiamata API C, è possibile utilizzare le proprie eccezioni C++ che utilizzeranno errno.h per ottenere il messaggio corrispondente dai codici di errore di chiamata dell'API C.

+0

fa questo lavoro sulle finestre ... perché ho trovato sul web, che funziona solo su UNIX –

+1

@CAD_coding vedere qui: http://msdn.microsoft.com/en-us/library/zc53h9bh.aspx –

+1

Quasi corretto, ma molte funzioni restituiscono solo il valore singolo (come '-1') in caso di errore e impostano' errno' sul codice di errore effettivo. Quindi dovresti 'strerror_r (errno, ...)' piuttosto che 'strerror_r (errorCode, ...)'. 'errno' è di per sé una pazza variabile pseudo-globale. –

Problemi correlati