|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2004
Messaggi: 760
|
[C - newbie] gestione errori di sistema
Ciao a tutti...
ho bisogno di un piccolo aiuto... avrei bisogno di inserire una chiamata ad un errore di sistema in un certo punto del codice... o meglio... faccio una fopen e, se il file non viene trovato, vorrei che mi saltasse fuori un messaggio di errore... ho sentito dire che è possibile farlo, con una funzione che dovrebbe chiamarsi error(), però non so in che libreria si trovi e, provando ad inserirla così com'è, il compilatore mi da questo errore -> too few parameters... mi spiegate come si usa? ![]() grazie
__________________
Gandalf_BD -------------------------------------------- "When you aim at perfection, you discover it's a moving target" |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
La funzione si chiama "perror", ed è dichiarata in stdio.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
Quote:
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
![]() Vuoi dire che su win non funziona come ti aspetti, immagino? Potrebbe essere; c'è comunque una API di windows per avere informazioni sugli errori, non so se funziona anche con fopen (oltre che con CreateFile).
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Jun 2004
Messaggi: 760
|
Quote:
l'errore è sempre lo stesso o posso "decidere io" quale generare? grazie 1000 ![]()
__________________
Gandalf_BD -------------------------------------------- "When you aim at perfection, you discover it's a moving target" |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
Quote:
![]() su windows non funziona bene perror ![]() ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
FILE *f = fopen(...); if(!f) perror("fopen"); potrebbe stampare, in caso di errore di privilegi, fopen: access denied perror di per se è standard ansi; però come dice Fenomeno devi verificare se sia stata correttamente implementata sotto windows. L'alternativa mi sembra sia GetLastError, ma non so se funziona con fopen.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
dai provo e vi posto i risultati
![]() ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
perror con fopen funziona bene ... mi ricordavo male
![]() Con getlasterror torna errore 2 ma qui bisogna capire che evento significa ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Jun 2004
Messaggi: 760
|
Quote:
__________________
Gandalf_BD -------------------------------------------- "When you aim at perfection, you discover it's a moving target" |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
è sotto windows.h
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
scusate l'OT, ma stavo morendo quando ho digitato fopen in google, come primo link mi ha restituito questo:
http://www.fondopensionefopen.it/ ![]() ![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
Quote:
![]() ![]() ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Ciao...
Evito di aprire una nuova discussione perche' il tema e' piu' o meno lo stesso... Con perror viene stampato un messaggio di errore relativo al valore 'corrente' della variabile errno. Sapete se c'e' qualche funzione analoga per stampare un messaggio relativo ad un valore arbitrario che errno potrebbe aver assunto in precedenza? Mi spiego meglio: supponiamo che io esegua diverse chiamate a funzione, e che in caso di errore di queste mi vada a salvare, dopo ogni chiamata, il valore assunto da errno. Utilizzando questi valori salvati, posso in qualche modo stampare i corrispondenti messaggi d'errore in "differita"? Oppure, c'e' modo di redirigere l'output di perror su una stringa invece che su file? Mi serve perche' l'applicazione che sto facendo deve andare a 'compilare' piu' di un file di log, e voglio di volta in volta decidere su quale di questi file scrivere l'output di perror senza redirigerlo in continuazione. Grazie, Gica |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
strerror di string.h (e la funzione thread-safe strerror_r, per i sistemi che la supportano)
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Perfetto! Proprio quello che cercavo
![]() Grazie mille, Gica |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Ho letto che la strerror() puo' produrre la stringa di errore nella lingua specificata attraverso la variabile d'ambiente LC_MESSAGES, ma non riesco a trovare quali sono i possibili valori che si possono assegnare a tale variabile
![]() Qualcuno sa quali sono? Potrebbero essere gli stessi di LANG? Ultima cosa: settando tale variabile in un processo, poi devo anche esportarla affinche' sia visibile ai figli del processo stesso? Grazie, Gica ![]() Aggiornamento: se do il comando locale, vedo che tutte le variabili del tipo LC_QUALCOSA hanno un valore, anche LC_MESSAGES; se invece do il comando echo $LC_MESSAGES ottengo una stringa vuota. Perche'? Ultima modifica di Gica78R : 11-05-2005 alle 18:27. |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Non ti conviene modificare quelle variabili d'ambiente, non c'è motivo. Devi usare le impostazioni di sistema, non imporre le tue. Così se un turco eseguirà il tuo programma, si ritroverà automaticamente i messaggi in turco.
Se proprio vuoi, le variabili d'ambiente si gestiscono con getenv/putenv (ma solo nel namespace corrente, ovvero solo per il processo corrente).
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Mar 2005
Messaggi: 1653
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Allora, innanzitutto servono due cose: in primis, l'applicazione deve chiamare
setlocale(LC_ALL, "") (definita in locale.h) in modo da poter utilizzare le impostazioni definite dalle variabili d'ambiente (nota che se non hai LC_MESSAGES sul tuo sistema, forse hai LC_ALL). Qui la man page è poco chiara, senza chiamare setlocale le variabili d'ambiente non hanno effetto. Quindi, è necessario che il database con le traduzioni per le tue localizzazioni sia presente; ad es. per it_IT.UTF-8 deve esistere il file /usr/share/locale/it_IT/LC_MESSAGES/libc.mo oppure il file /usr/share/locale/it/LC_MESSAGES/libc.mo Questo file dovrebbe essere fornito dalla distribuzione, ma molte non lo forniscono (ad es. sulla mia Mandrake non c'è). In sintesi: chiama setlocale(LC_ALL, "") all'inizio del tuo programma e vivi tranquillo. Se non c'è la traslazione, vuol dire che manca libc.mo e su questo non puoi farci molto.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:14.