【问题标题】:How to test STDIN read error如何测试 STDIN 读取错误
【发布时间】:2014-03-17 03:20:26
【问题描述】:

我有一个 Linux 程序(目前在汇编中),它有一个检查:如果从 STDIN 读取失败,则显示错误消息。问题是我不知道如何测试这个条件,如何执行程序,使其无法从 STDIN 读取。 IT 必须在没有 STDIn 的情况下运行,否则 STDIN 可以在程序启动之前以某种方式关闭?

【问题讨论】:

  • 使用read 系统调用。阅读其文档以了解错误是如何传达的。
  • 嗯,我的问题不是如何测试我程序中读取的系统调用结果。我已经实施了这个测试。我需要测试这个程序并为其提供一个失败的标准输入,看看我实现的测试是否正常工作。
  • 我明白了;没关系,我真的不明白这个问题。
  • 据我了解,他想故意在stdin 上导致sys_read 上的错误以测试他的错误处理程序。我不知道答案。拔掉键盘?可能读入了无效的缓冲区地址(ecxrsi)?

标签: linux assembly stdin


【解决方案1】:

是的,您可以关闭文件描述符,这将触发错误。使用bash进行测试:

$ strace ./a.out 0<&-
execve("./a.out", ["./a.out"], [/* 32 vars */]) = 0
[ Process PID=4012 runs in 32 bit mode. ]
read(0, 0xffe13fec, 1)                  = -1 EBADF (Bad file descriptor)

您还可以引发手册页中列出的其他错误,例如:

$ strace ./a.out 0</tmp
execve("./a.out", ["./a.out"], [/* 32 vars */]) = 0
[ Process PID=4056 runs in 32 bit mode. ]
read(0, 0xffed5c0c, 1)                  = -1 EISDIR (Is a directory)

【讨论】:

  • 我不明白它是如何工作的以及奇怪的输出是什么,但显然它可以工作!
  • ./a.out 0&lt;&amp;- 就够了
  • strace 是一个系统调用跟踪器,我用它来显示read 返回一个错误代码。
猜你喜欢
  • 2023-03-18
  • 2020-10-25
  • 1970-01-01
  • 2019-11-13
  • 2013-04-04
  • 2022-07-03
  • 2013-11-30
  • 2013-12-08
  • 1970-01-01
相关资源
最近更新 更多