據我所知,exit(1)
指示的錯誤,例如:退出(0)的目的是什麼?
if (something went wrong)
exit(EXIT_FAILURE);
但是,什麼是使用exit(EXIT_SUCCESS);
的目的是什麼?
當處理進程可能嗎?例如爲fork()
?
感謝
據我所知,exit(1)
指示的錯誤,例如:退出(0)的目的是什麼?
if (something went wrong)
exit(EXIT_FAILURE);
但是,什麼是使用exit(EXIT_SUCCESS);
的目的是什麼?
當處理進程可能嗎?例如爲fork()
?
感謝
這給調用程序(通常是指令殼)的方式,以檢查是否在程序正常或不終止該系統的一部分。
編輯 - 啓動 -
順便說一句,可以通過使用$?
shell變量來查詢一個交互式命令的退出代碼。例如,這個失敗的ls
命令產生值爲2
的退出代碼。
$ ls -3 ls: invalid option -- '3' Try `ls --help' for more information. $ echo $? 2
編輯 - 結束 -
試想一個批處理文件(或shell腳本),調用了一系列的方案,並根據每次運行的結果可能會選擇一些動作或其他。這個動作可能包含一個簡單的消息給用戶,或者調用其他一些程序或一組程序。
這是程序返回其運行狀態的一種方式。
另外,請注意,零表示沒有問題,任何非零值指示的問題。
程序通常會使用不同的非零值傳遞更多信息(除了非正常終止之外)。因此,非零出口值作爲更具體的錯誤代碼,可以識別特定的問題。當然,這取決於代碼的含義是可用的(通常是/文檔有望在)
例如,ls man page在底部此位的信息:
退出狀態爲0,如果OK ,如果小問題1,如果嚴重麻煩2。
對於Unix/Linux手冊頁,請查看標題爲EXIT STATUS的部分以獲取此信息。
0確實表示成功,但非零值可能表示問題,也可能不表示問題。根據1999 C 7.20.4.3 5,除0,EXIT_SUCCESS或EXIT_FAILURE之外的任何值的含義都是實現定義的。例如,一個實現可以使用狀態的低位來表示成功或失敗,高位表示傳遞附加信息,例如處理了多少小部件。 – 2012-07-30 18:28:09
@EricPostpischil謝謝..這是有用的信息和有益的知識。 – Levon 2012-07-30 20:06:37
它也允許人確定程序是否正常終止。只是說 – 2012-07-30 21:29:25
您只能通過調用return函數從主函數中退出程序。要從其他地方退出程序,可以調用exit(EXIT_SUCCESS)。例如,當用戶點擊退出按鈕時。
好吧,你也可以在'main'中使用'exit()'當然是 – pb2q 2012-07-30 18:01:16
!也許我不清楚 – 2012-07-30 18:03:28
「正常」退出程序有兩種方式:從main()
返回,或致電exit()
。正常情況下,exit()
被用來表示失敗的信號。但是,如果您不在main()
中,您仍然必須以某種方式退出。 exit(0)
通常用於在不在main()
時終止進程。
main()
實際上並不是操作系統的特殊功能,只是針對運行時環境。實際上被加載的'函數'通常被定義爲_start()
(這是由鏈接器處理的,超出了本答案的範圍),用匯編寫成,它簡單地準備環境並調用main()
。從main()
返回後,它還會調用exit()
,返回值爲main()
。
如果你發現你的程序已經完成了所有需要做的事情,並且不在'main()'中,那麼你可以調用'exit(0)'。 – 2012-07-30 18:00:08
@DanielFischer:那麼你的意思是說,這是讓我的代碼返回到它的調用函數,而不使用'return'的方法嗎? – ron 2012-07-30 18:07:08
這是一種幾乎立即結束程序執行的方式(某些正常關機例程可能會在預定時間運行)與指定的退出代碼。如果通過「調用函數」來表示shell或類似的話,那麼是的;如果你的意思是在同一個程序中有一些功能,那麼不需要。 – 2012-07-30 18:15:30