在c語言中,很多庫函式在呼叫失敗時都會返回特定的值。比如返回-1,空指標,eof等。但是這些值僅僅表示的呼叫失敗,並未給出詳細的錯誤資訊。如果想檢視詳細的錯誤內容,就要去檢視errno的錯誤**,errno在errno.h中定義。
關於errno的解釋(乙個int型別,可修改的左值):
errno包含了系統中的常見錯誤編號,我們也可以對它進行修改。
由於errno被宣告為volatile,它可能會被訊號處理程式非同步地更改; 請參閱定義處理程式。 但是,正確寫入的訊號處理程式可以儲存並恢復errno的值,所以通常不用擔心這種可能性,除非寫訊號處理程式。
errno在程式執行時被初始化為0。很多庫函式會在呼叫失敗時,將errno的值設定為一些特定非零值。這些錯誤條件列出每個具體的錯誤,這些錯誤在函式成功呼叫時不會更改errno的值,因此我們不能使用errno來確定呼叫是否失敗。我們應該在每個方法中都定義errno,在呼叫時檢查errno的值。
很多庫函式都會在被呼叫結束是設定非零的errno作為函式返回值表示呼叫失敗,我們應當假設任何庫函式都在要返回失敗資訊是修改errno的值。
可移植性注意:iso c將errno指定為「可修改的左值」,而不是作為變數,允許將其作為巨集實現。 例如,它的擴充套件可能涉及乙個函式呼叫,如* __ errno_location()。 其實這就是gnu / linux和gnu / hurd系統。 每個系統上的gnu c library都可以對特定系統進行任何操作。
有一些庫函式,如sqrt和atan,在出現錯誤時返回完全合法的值,但也設定errno。 對於這些函式,如果要檢查是否發生錯誤,推薦的方法是在呼叫函式之前將errno設定為零,然後再檢查其值。
所有錯誤**都有符號名稱,他們作為巨集定義在。這些名稱已'e'作為開始和其他大寫字母或數字組合。我們應當檢視c庫中定義的保留名稱。
錯誤**值都是正整數,並且都是不同的,除了乙個例外:ewouldblock和eagain是相同的。 由於值不同,可以將它們用作switch語句中的標籤; 只需不要同時使用ewouldblock和eagain。 程式不應該對這些符號常量的具體值做出任何其他假設。
由於errno可以作為其他情況返回自己特定的錯誤值,因此沒有必要作為對於任意巨集實現,但是不應當對某些特定庫函式的唯一值進行修改。
除了在gnu / hurd系統之外,如果給定乙個無效的指標作為引數,幾乎任何系統呼叫都可以返回efault。 由於這只能由於程式中的錯誤而發生,並且由於不會在gnu / hurd系統上發生錯誤,所以在單個功能的描述中,沒有提及efault,節省了空間。
在某些unix系統中,許多系統呼叫也可以返回efault,如果作為引數指定乙個指向堆疊的指標,並且由於某些模糊原因的核心嘗試擴充套件堆疊,將失敗。 如果發生這種情況,應該嘗試使用靜態或動態分配的記憶體而不是該系統上的堆疊記憶體。
rsync 錯誤報告
rsync configure 配置一 ignore errors 說明 這個選項最好加上,否則再很多crontab的時候往往發生錯誤你也未可知,因為你不可能天天去看每時每刻去看log,不加上這個出現錯誤的機率相對會很高,因為任何大點的專案和系統,磁碟io都是乙個瓶頸 rsync error 錯誤一...
PHP錯誤報告
級別常量 錯誤值錯誤報告描述 e error 致命的執行時錯誤 阻止指令碼執行 e warning 執行時警告 非致命性錯誤 e parse 從語法中解析錯誤 e notice 執行時注意訊息 可能是或可能不是乙個問題 e core error php啟動時初始化過程中的致命錯誤 e core wa...
開啟WordPress錯誤報告
注釋掉那裡的第一行,並將其餘的新增到您的wp config.php檔案中,以從wordpress 獲得更詳細的錯誤報告。絕對不要現場執行此操作,而應在本地進行開發和測試。define wp debug false define wp debug true define wp debug log tr...