如何确定输入(stdin)已损坏
How to determine that input (stdin) is broken?
我正在开发一个用于coredump处理的工具。使用sysctl
,我将其设置为在工具的输入上获得coredump。一切都很好。但今天我面临的情况是(我不知道为什么)核心转储被破坏。当我将常规文件设置为coredumps目标时,它不会出现。所以——我想它是因为某种原因坏了。当我设置我的工具tee
时,没有结果。
所以。我想确定这种情况(如果可能的话)并记录下来,而不是产生损坏的文件。
我正在使用::read(STDIN_FILENO,buff, buffSize)
来获取数据。而在read
端,只返回0
。我想指出0
何时表示文件结束,何时表示管道破裂。
根据程序中的错误,任何都可能出错,并且没有可靠的方法来检测出了什么,甚至是否出了什么问题。
一旦程序执行了未定义的行为或类似行为,所有赌注都会被取消,你能做的最好的事情就是希望某些报告渠道仍然可靠工作。通常,您可以信任操作系统内核编写的核心/迷你转储,以便在崩溃时可靠地捕获程序的状态。但是,如果你的程序破坏了堆栈或做了其他可怕的事情,你从这些转储中得到的堆栈跟踪仍然可能无法使用。
您已经发现:read
将返回0,表示没有读取任何字节。对于像STDIN
这样的阻塞流,应该等待字节可以被读取,这是一种错误情况。
您不需要"另一个API";您只需要阅读您正在使用的文档即可。
相关文章:
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 为什么C中的通用链表中存储的数据已损坏
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 变量"A"周围的堆栈已损坏
- 两个垫子的 OpenCV 数据是相同的,但使用 Mat::at 检索时的值已损坏
- 运行时检查失败 #2 - 变量"e"周围的堆栈已损坏。发生
- 变量周围的堆栈'sortArray'已损坏
- 变量周围的堆栈'folderPath'已损坏
- 在为 iOS 构建 aws-sdk-cpp 时,cmake 上的 CXX 编译器错误已损坏
- 运行时检查失败 #2 - 变量周围的堆栈'...'已损坏
- AES-128 CFB-8解密的前16个字节已损坏
- 运行时检查失败 #2 - 变量"l1"周围的堆栈已损坏
- C++:此代码可以编译,但引发运行时检查失败 #2 - 围绕变量周围的堆栈'num'已损坏。发生
- 图像在本地主机上显示已损坏
- 检查工作正常的 CXX 编译器:/cygdrive/c/cygwin64/bin/clang++ -- 已损坏
- 数组变量周围的堆栈已损坏
- 运行时检查失败 - 变量周围的堆栈已损坏
- 串行端口的传入值有时已损坏或丢失
- 如何确定输入(stdin)已损坏