如何确定输入(stdin)是否已损坏?

时间:2016-07-26 15:16:53

标签: c++ linux posix

我正在开发一个用于coredump处理的工具。使用sysctl我将其设置为获取工具输入的coredump。一切都很好。但今天我遇到了(我不知道为什么)coredump被打破的情况。当我将常规文件设置为coredumps target时 - 它不会出现。所以 - 我认为它因某种原因被打破了。当我设置我的工具tee时 - 没有结果。

因此。我想确定这种情况(如果可能的话)并记录它而不是产生损坏的文件。

我正在使用::read(STDIN_FILENO,buff, buffSize)来获取数据。最后read只返回0。我想指出何时0表示文件的结尾以及何时表示管道已损坏。

2 个答案:

答案 0 :(得分:1)

根据程序中的错误,任何可能出错,并且没有可靠的方法来检测 出错了什么,甚至如果 任何事情都出了问题。

一旦程序执行了未定义的行为或类似行为,所有投注都会关闭,您可以做的最好的事情是希望某些报告渠道仍可正常运行。 通常,您可以信任OS内核编写的核心/迷你转储,以便在崩溃时可靠地捕获程序的状态。但是如果你的程序已经破坏了堆栈或做了其他可怕的事情,你从这些转储中获得的堆栈跟踪仍然可能接近无法使用。

答案 1 :(得分:0)

您已经发现:read将返回0,表示没有读取任何字节。对于阻塞像STDIN这样的流,应该等到可以读取字节,这是一个错误条件。

您不需要“其他API”;您只需阅读您正在使用的文档。