2016-07-26 69 views
-1

我正在開發一個coredump處理工具。使用sysctl我將它設置爲在工具的輸入上獲取coredump。一切都很好。但是今天我面對的情況是(我不知道爲什麼)coredump壞了。當我將常規文件設置爲coredumps目標時 - 它不會出現。所以 - 我認爲它出於某種原因被打破了。當我安裝而不是我的工具tee - 沒有結果。如何確定輸入(stdin)被破壞?

所以。我想確定這種情況(如果可能的話)並記錄它,而不是生成破損的文件。

我使用::read(STDIN_FILENO,buff, buffSize)來獲取數據。並在結束read只是返回的0。我想指出什麼時候0意味着文件結束,什麼時候意味着管道損壞。

+0

您是否檢查過'read'調用的結果? –

+0

是的,我在最初的消息中寫到了這件事。結果爲零。 「 – denys

+0

」結束它只是返回的'0'「聽起來像你抱怨'buff'在最後零。請下次製作[MCVE]。對,那麼問題是什麼?如果你得到'0',管道就壞了......缺少什麼? –

回答

1

根據在程序中的bug,什麼可能出問題,並有檢測沒有可靠的方法什麼出了問題,甚至如果什麼出了問題。

只要一個程序行使未定義的行爲或類似,所有的賭注都關閉,你能做的最好的是希望一些報告通道仍然有效,可靠。 通常,您可以信任由操作系統內核編寫的核心/小型轉儲,以便在崩潰時可靠地捕獲程序的狀態。但是,如果你的程序損壞了堆棧或者做了其他可怕的事情,那麼從這些轉儲中獲得的堆棧跟蹤仍然可能接近不可用。

+0

我不關心coredump的內容。我只是想通知用戶,因爲水漬造成Coredump損壞。沒有我的工具,這種coredump就錯過了。由於文件沒有完成。但是我的工具只是在停止接收輸入時完成文件。所以。主要任務 - 是否可以確定輸入是否被破壞? – denys

+0

「是否可以確定輸入是否被破壞?」 - 在很多情況下,也許可能。在最一般的情況下。沒有。 –

0

您已經發現:read將返回0,表示沒有讀取字節。爲了阻止像STDIN這樣的流,應該等到字節可以讀取,這是一個錯誤條件。

你不需要「另一個API」;你只需要閱讀你正在使用的文檔。