2015-05-16 2 views
20

Есть ли способ вернуть код выхода в Rust 1.0?Как очистить программу кодом выхода?

Я пробовал env::set_exit_status(exit_code);, но это создает ошибку компилятора.

Существует также этот вопрос: Exit Rust program early, который аналогичен, но спрашивает о случае, когда процесс должен быть удален раньше.


EDIT: Я ищу решение, которое также позволит процесс прибраться стек, вызов деструкторов и т.д.

+2

@static_rtti Можете ли вы объяснить, какая часть ответа [Леванса] (http://stackoverflow.com/a/30285110/155423) непригодна? * Конечно, язык системного программирования ... * помните, что Rust также должен использоваться в средах, где нет процесса запуска (например, ядро). – Shepmaster

+0

Я не читал его достаточно хорошо, это звучит так, как я хочу. –

ответ

8

std::process::exit выходит из программы с указанным кодом выхода.

+1

К сожалению, он не очищает и не вызывает деструкторы. Я исправлю вопрос, чтобы упомянуть об этом. –

+0

Любые причины, по которым вам нужно очистить, чтобы это произошло? У вас есть деструкторы, которые делают «интересные» вещи? Если нет, то, чтобы очистить операционную систему, процесс часто достаточно хорош. –

+0

Я предполагаю, что я ищу прямую замену 'return exit_code;' на C. Я бы хотел избежать возможности не промывать диск и т. Д., Если это вообще возможно. –

26

здания над комментариями @FrancisGagné 's answer, если вы ищете эквивалент Кассиопеян return exit_code, вы можете искусственно построить его таким образом:

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

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

Таким образом, все объекты вашей программы будут в область действия функции real_main(), и вы можете безопасно использовать return exit_code; в main, все еще имея все деструкторы должным образом запущенные.

Было бы более целесообразно использовать std::env::set_exit_status(..), но эта функция еще не стабилизирована.