2015-05-16 17 views
20

Esiste un modo per restituire un codice di uscita in Rust 1.0?Come terminare correttamente il programma con un codice di uscita?

Ho provato env::set_exit_status(exit_code); ma questo genera un errore del compilatore.

C'è anche questa domanda: Exit Rust program early che è simile ma chiede il caso in cui il processo deve essere terminato in anticipo.


EDIT: Sto cercando una soluzione che permetterà anche il processo per riordinare lo stack, chiamare i distruttori, ecc

+2

@static_rtti Puoi spiegare ulteriormente quale parte della risposta [Levans] (http://stackoverflow.com/a/30285110/155423) non è adatta? * Sicuramente un linguaggio di programmazione dei sistemi ... * ricorda che Rust deve essere usato anche in ambienti in cui non esiste un processo di avvio (come un kernel). – Shepmaster

+0

Non l'ho letto abbastanza bene, sembra proprio quello che voglio. –

risposta

8

std::process::exit esce dal programma con il codice di uscita specificato.

+1

Sfortunatamente non pulisce e chiama i distruttori. Modificheremo la domanda per dirlo. –

+0

Qualche motivo per cui è necessario che la pulizia si verifichi? Hai dei distruttori che fanno cose "interessanti"? In caso contrario, lasciare che il sistema operativo ripulisca il processo è spesso abbastanza buono. –

+0

Suppongo che sto cercando un sostituto diretto per "return exit_code;" in C. Vorrei evitare la possibilità di non eseguire il flush su disco, se possibile. –

26

costruzione sopra i commenti di @FrancisGagné 's answer, se siete alla ricerca di un equivalente di C di return exit_code, si può artificialmente costruire in questo modo:

fn main() { 
    let exit_code = real_main(); 
    std::process::exit(exit_code); 
} 

fn real_main() -> i32 { 
    // the real program here 
} 

In questo modo, tutti gli oggetti del programma saranno nella ambito della funzione real_main(), ed è possibile utilizzare in modo sicuro return exit_code; in main mentre continuano a funzionare correttamente tutti i distruttori.

Sarebbe più appropriato utilizzare std::env::set_exit_status(..), ma questa funzione non è ancora in Rust stabile.

Problemi correlati