我正在开发一个用于coredump处理的工具。使用sysctl
我将其设置为获取工具输入的coredump。一切都很好。但今天我遇到了(我不知道为什么)coredump被打破的情况。当我将常规文件设置为coredumps target时 - 它不会出现。所以 - 我认为它因某种原因被打破了。当我设置我的工具tee
时 - 没有结果。
因此。我想确定这种情况(如果可能的话)并记录它而不是产生损坏的文件。
我正在使用::read(STDIN_FILENO,buff, buffSize)
来获取数据。最后read
只返回0
。我想指出何时0
表示文件的结尾以及何时表示管道已损坏。
答案 0 :(得分:1)
根据程序中的错误,任何可能出错,并且没有可靠的方法来检测 出错了什么,甚至如果 任何事情都出了问题。
一旦程序执行了未定义的行为或类似行为,所有投注都会关闭,您可以做的最好的事情是希望某些报告渠道仍可正常运行。 通常,您可以信任OS内核编写的核心/迷你转储,以便在崩溃时可靠地捕获程序的状态。但是如果你的程序已经破坏了堆栈或做了其他可怕的事情,你从这些转储中获得的堆栈跟踪仍然可能接近无法使用。
答案 1 :(得分:0)
您已经发现:read
将返回0,表示没有读取任何字节。对于阻塞像STDIN
这样的流,应该等到可以读取字节,这是一个错误条件。
您不需要“其他API”;您只需阅读您正在使用的文档。