[英]printf flush at program exit
我很想知道當程序退出時printf()
函數的flush是如何工作的。
我們來看下面的代碼:
int main(int ac, char **av)
{
printf("Hi");
return 0;
}
在這種情況下, printf()
如何設法將其緩沖區刷新到stdout
?
我想這是平台依賴的,所以讓我們采取Linux。
它可以使用gcc
的__attribute__((dtor))
但標准庫將依賴於編譯器。 我認為這不是它的工作方式。
任何解釋或文檔鏈接表示贊賞。 謝謝。
當運行exit()
時,C運行時將注冊atexit()
處理程序以刷新標准緩沖區。
看到這個解釋 。
當程序正常退出時, exit
功能始終執行標准I / O庫的干凈關閉,這會導致刷新所有緩沖的輸出數據。
從main函數返回一個整數值相當於使用相同的值調用exit。因此, return 0
與exit(0)
具有相同的效果
如果_Exit
或_exit
,則進程將立即終止,IO將不會被刷新。
只是為了擴展trofanjoe的回應:
退出導致程序正常終止。 以相反的注冊順序調用atexit函數,刷新打開的文件,關閉打開的流,並將控制權返回給環境。
和
在main中 ,return expr等同於exit(expr)。 exit的優點是可以從其他函數調用它
從我的機器上的man stdio
(強調添加),運行RHEL 5.8:
隨后可以通過相同或另一個程序執行重新打開文件,並且回收或修改其內容(如果它可以在開始時重新定位)。 如果main函數返回其原始調用者,或者調用exit(3)函數,則在程序終止之前關閉所有打開的文件(因此刷新所有輸出流)。 其他程序終止方法,例如abort(3),並不打算正確關閉文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.