C++ 如何确定输入(stdin)已损坏?

C++ 如何确定输入(stdin)已损坏?,c++,linux,posix,C++,Linux,Posix,我正在开发一个coredump处理工具。使用sysctl我将其设置为在工具的输入上获得coredump。一切都很好。但今天我面临的情况是(我不知道为什么)coredump被破坏了。当我将常规文件设置为coredumps目标时,它不会出现。所以-我想它是因为某种原因坏了。当我设置工具tee时,没有结果 所以。我想确定这种情况(如果可能的话)并记录它,而不是生成损坏的文件 我正在使用::read(STDIN\u FILENO,buff,buffSize)来获取数据。最后,读取readreturn's

我正在开发一个coredump处理工具。使用
sysctl
我将其设置为在工具的输入上获得coredump。一切都很好。但今天我面临的情况是(我不知道为什么)coredump被破坏了。当我将常规文件设置为coredumps目标时,它不会出现。所以-我想它是因为某种原因坏了。当我设置工具
tee
时,没有结果

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


我正在使用
::read(STDIN\u FILENO,buff,buffSize)
来获取数据。最后,读取
read
return's
0
。我想指出什么时候
0
意味着文件结束,什么时候意味着管道破裂。

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

一旦一个程序执行了未定义的行为或类似行为,所有的赌注都将落空,你所能做的就是希望某个报告渠道仍然可靠地工作。
通常,您可以信任操作系统内核编写的核心/小型转储,以便在崩溃时可靠地捕获程序的状态。但是,如果您的程序损坏了堆栈或执行了其他可怕的操作,那么从这些转储中获得的堆栈跟踪可能仍然几乎无法使用。

您已经发现:
read
将返回0,表示未读取任何字节。对于阻塞诸如STDIN之类的流,应该等到可以读取字节时,这是一种错误情况


您不需要“另一个API”;您只需要阅读您正在使用的文档。

您是否检查了
read
调用的结果?是的,我在最初的消息中写到了这一点。结果是零。“最后返回的
0
”听起来像是你在抱怨
buff
的末尾有零。请下次再出示一张。对,那么,问题出在哪里?如果得到
0
,则管道已断开。。。。缺少什么?我想指出
0
何时意味着文件结束,何时意味着管道断开。我不关心coredump的内容。我只想通知用户coredump由于smth而被破坏。没有我的工具,这样的垃圾堆就不见了。因为文件没有完成。但我的工具只是在停止接收输入时完成文件。所以主要任务-有可能确定输入被破坏吗?“有可能确定输入被破坏吗?”-在许多情况下,可能,可能。在最普遍的情况下。不