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

How to determine that input (stdin) is broken?

本文关键字:已损坏 stdin 何确定 输入      更新时间:2023-10-16

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

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

我正在使用::read(STDIN_FILENO,buff, buffSize)来获取数据。而在read端,只返回0。我想指出0何时表示文件结束,何时表示管道破裂。

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

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

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

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