0
A
回答
2
調用abort
函數會導致程序被終止。因此,abort
不會返回。
2
許多C庫函數永遠不會返回給調用者:
exit()
終止程序,提供了一個退出狀態。abort()
終止程序並顯示錯誤消息。longjmp()
將控制轉移回到由相應setjmp()
彙編代碼要麼保存分支點直接從返回地址不同的地址或進行系統調用終止該程序。
1
說:「永遠不會返回」必須無條件做這五兩件事之一的功能:
- 進入無限循環(
for(;;);
) - 執行「控制的非局部轉移」,使得一些其他函數似乎返回(
longjmp
,swapcontext
) - 調用導致操作系統至少終止當前執行線程的「系統調用」(
pthread_exit
,_exit
,reboot
) - 執行某種禁止或無效的機器操作(無效的指令,訪問映射的內存等),再次導致操作系統終止進程
- 調用,它上面的東西一個其他一些功能。
abort
通常是5-> 3,4一些組合,並作爲最後的手段1,因爲其合同終止進程後事情都已經走了可怕的錯誤:它不是出了問題它嘗試的第一件事(通常是kill(getpid(), SIGABRT)
)將不起作用。
在較低的層次上,我們可以談論一個「執行線程」究竟是什麼,操作系統如何設置它們並將它們關閉,以及操作系統本身是如何由引導加載程序調用的程序,如果你以正確的方式眯起來,「運行程序」只是動態地修改操作系統的代碼,以包含程序的代碼,然後跳轉到該程序。但也許你不希望我在這個答案框中放棄整個操作系統課程。
+0
感謝您的詳細解釋,但@dbush的回答非常簡短。 – adarsh
相關問題
- 1. php函數再次返回函數
- 2. 如何返回0並終止函數?
- 3. 如何返回在SQL Server ISNULL函數不止一個值
- 4. 如何返回一個函數,然後再調用它?
- 5. 從函數返回函數而不調用返回函數
- 6. 如何禁止函數返回R中的「Null」?
- 7. 如何從函數中返回數據?
- 8. 如何返回函數?
- 9. Javascript調用函數,不要再調用它,直到它返回
- 10. 「OBJECT_NAME」函數不再返回對象的名字
- 11. RavenDB指數不再返回結果
- 12. jQuery $ .get不再返回數據
- 13. .NET Webservice不再返回JSON數據
- 14. 如何標記返回類型不返回的函數?
- 15. 返回deferred.done,不從函數返回
- 16. PHP函數'返回'不返回值
- 17. 如何從jQuery函數中返回值?
- 18. 如何從lambda函數中返回?
- 19. PHP:防止函數返回值?
- 20. 函數mysql_fetch_row返回NULL,禁止登錄
- 21. 停止具有「返回」的tkinter函數
- 22. 再回到事件處理函數返回未定義
- 23. JavaScript中的touchstart不再返回TouchList
- 24. 如何等待回調函數返回?
- 25. 高階函數返回函數什麼都不返回
- 26. 如何在Scala中定義函數,返回自己返回
- 27. 如何從SP返回的函數中返回值?
- 28. 如何防止這個clojure函數返回一個列表
- 29. C函數不返回
- 30. 遞歸函數不返回
操作系統神奇。 'abort'將控制權交給操作系統,操作系統終止您的進程 – litelite
因爲它關閉了程序。會有什麼回報? – AntonH
exit()函數永遠不會返回(如果你使用C99和C11標準,也不使用'_Exit()'或'quick_exit()',也不會返回POSIX中的'_exit()')。 –