Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    return code: linee guida?

    Mi chiedevo... esistono da qualche parte delle linee guida su che codici di ritorno usare per i programmi in linux? Non intendo un semplice 0=>ok e !0=>errore, mi riferisco a qualcosa di più raffinato.
    Per esempio ho notato che sul mio sistema la terminazione di un programma tramite segfault genera un codice 139. Ma è uguale ovunque o può cambiare?
    Ho googlato un po' ma non trovo nulla.
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  2. #2
    Utente di HTML.it L'avatar di GunMan
    Registrato dal
    Dec 2005
    Messaggi
    2,642
    a suo tempo cercai anch'io un'informazione simile, alla fine ho trovato in questa pagina un ottimo spunto iniziale.

    anche nelle varie man pages si possono trovare riferimenti e/o nel file /usr/include/asm-generic/errno.h

    spero possa aiutare

    Chaos A.D. Disorder unleashed.
    Starting to burn. Starting to lynch.
    Silence means death. Stand on your feet.
    Inner fear. Your worst enemy.

    Refuse / Resist

  3. #3
    E' già un punto di partenza ti ringrazio.

    edit: Cmq nelle man non riesco a trovare nulla.
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    746

    Re: return code: linee guida?

    Originariamente inviato da GreyFox86
    Mi chiedevo... esistono da qualche parte delle linee guida su che codici di ritorno usare per i programmi in linux? Non intendo un semplice 0=>ok e !0=>errore, mi riferisco a qualcosa di più raffinato.
    Per esempio ho notato che sul mio sistema la terminazione di un programma tramite segfault genera un codice 139. Ma è uguale ovunque o può cambiare?
    Ho googlato un po' ma non trovo nulla.
    I codici di errore si trovano nella libreria standard (man 3 errno) e sono
    gli stessi per tutti (poi ci sono le estensioni etc., ma questa è un'altra storia).

    Comunque, non esiste qualcosa di più raffinato: ogni sistema operativo
    interpreta il valore restituito da un programma come gli pare e, per evitare
    spiacevoli inconvenienti, è bene usare gli unici valori di ritorno definiti
    dallo standard ANSI, ovvero EXIT_SUCCESS, EXIT_FAILURE (i valori dei quali
    dipendono comunque dalla libreria usata) e 0 (questo è sempre valido
    ed utilizzabile al posto di EXIT_SUCCESS, ma non è detto che abbiano
    per forza lo stesso valore)...

    D'altro canto, se non ti interessa che un tuo programma sia valido
    per TUTTI gli altri compilatori standard, puoi fare quello che vuoi,
    ma non è detto che una futura versione di <un_qualsiasi_kernel/altro_programma>
    non vada in crash perché ha ricevuto un valore che non gli piaceva.


    In ogni caso, se proprio devi, è meglio utilizzare le macro in errno.h,
    piuttosto che valori a caso (infatti potresti per combinazione restituire
    un codice di errore in realtà corrispondente a EXIT_SUCCESS).



    P.S.: se vuoi un consiglio, quando il tuo programma incontra un errore fatale,
    stampa un messaggio o comunica il codice ad altri programmi tramite
    socket/pipe/file temporanei, poi esci con EXIT_FAILURE.

    ah, ovviamente il tutto per quanto riguarda i programmi in C(++)...

  5. #5
    io credo che ogni programma abbia i suoi exit status


    esempio bash, ne ha alcuni fissi:

    http://www.pluto.it/files/ildp/guide...l#EXITCODESREF

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    746
    sì, ma gli script restituiscono il valore alla shell, non al kernel

  7. #7
    La mia domanda non era solo atta a sapere che valori ritornare nei miei programmi (sono solito usare sempre EXIT_SUCCESS ed EXIT_FAILURE), ma anche su quali valori potermi basare per decidere che azioni compiere negli script bash quando controllo la variabile $?.
    Ho fatto uno scriptino che mantiene running un programma, nel senso che se crasha lo riavvia. Solo che prima di controllare proprio per il codice 139 che ho nominato sopra volevo essere sicuro che ci fossero delle convenzioni fisse dietro. Al momento controllo semplicemente che sia diverso da 0.
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    746
    Ah ok, come non detto ...

    ...comunque, allora, non stiamo parlando dello stato di uscita
    di un programma, ma dello stato in cui è terminato.

    Ovvero: la variabile $?, nella bash, può contenere il valore restituito
    con exit o return, se un programma termina normalmente la sua esecuzione
    (stato di uscita), oppure uno dei codici di uscita riservati della bash,
    se viene interrotto in modo anomalo.

    Ad esempio, come puoi vedere dal link che ha postato sacarde,
    il valore 139, restituito in caso di segmentation fault, è ottenuto
    dalla somma di 128 (riservato: interruzione dell'esecuzione
    del programma a causa di un errore fatale) ed 11,
    ovvero il segnale SIGSEGV (per l'elenco dei segnali: `man 7 signal`).

    Il problema è che il valore di $? dipende sia dal comportamento
    del programma, che dal sistema/architettura; es.:
    1) i valori dei segnali non sono uguali per tutti, quindi il significato
    di 139 può variare;
    2) un programma che cerca di gestire il SIGSEGV e che esce
    con `return <qualcosa>`, termina correttamente la propria esecuzione:
    $? avrà cosi il valore di <qualcosa> (magari EXIT_FAILURE),
    anche se il programma è terminato per colpa di un segmentation fault.


    Spero di esserti stato utile...

  9. #9
    Chiarissimo, eviterò di usarli allora.
    Grazie a tutti
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.