2014-02-13 104 views
0

我有一個叫涓流方案,將發出警告,並在其源代碼有:此錯誤消息來自哪裏?

if (stat(sockname, &sb) == -1 && 
    (errno == EACCES || errno == ENOENT)) 
    warn("Could not reach trickled, working independently"); 

但我得到的消息是:

trickle: Could not reach trickled, working independently: No such file or directory 

哪裏這個No such file or directory從何而來?

+0

這將是非常有用的知道什麼是在您發佈的3行代碼之前和之後。可能是由'warn'函數打印的。 –

+1

@devnull這是一個功能,它認爲它是系統之一。它實際上使用'strerror(errno)'打印錯誤消息。 – jcubic

回答

0

該消息來自您的if (..)比較的第二部分。

代碼執行了一個stat()系統調用,在sockname上。 然而,統計()返回ENOENT,轉化爲「沒有這樣的文件或目錄」

你需要了解如何sockname構造,看它是否應該有 一直有效。

4

我認爲,當你得到一個errno庫存的錯誤值時,函數warn可以用它作爲精度。

在這種特殊情況下,我敢打賭這是ENOENT的錯誤沒有ENTRY是在errno。

man warn(3)

的ERR(),VERR(),警告(),和VWARN()函數追加(3)基於所述全局變量錯誤從字符串錯誤得到的錯誤消息,通過前面另一個冒號和空格,除非fmt參數爲NULL。

0

錯誤來自stat函數,並作爲warn函數的一部分進行報告。更詳細地,從警告文檔:

的FN ERR和Fn警告函數系列顯示在標準錯誤輸出格式化的錯誤 消息。在所有情況下,程序名稱的最後一個 組件,冒號字符和空格都是 輸出。如果Fa fmt參數不是NULL,則輸出格式錯誤消息printf(3) 。輸出由換行符 終止。

ERR,(3)基於所述的FN FN VERR,FN警告,和Fn VWARN功能追加從字符串錯誤得到的 錯誤消息上的代碼或由另一結腸和空間除非法FMT 之前全局 變量errno參數爲NULL輸入代碼在這裏

因此,「沒有這樣的文件或目錄」從統計操作來,因爲它無法找到sockname並正在通過代碼傳遞給警告功能。