我制作一个c程序来从串行设备读取数据。我从串行设备获得了5个值,并且我已经创建了一个逻辑,通过它可以自动更新值。它运行正常,但有一段时间后它会挂起并显示错误error 9 from tcgetattr
。
我使用了此问题的一个答案中的代码http://tinyurl.com/keuxkgz
错误在函数void set_blocking (int fd, int should_block)
和int set_interface_attribs (int fd, int speed, int parity)
中。我无法将其删除。请帮忙。谢谢!
答案 0 :(得分:3)
我不打算看外部消息来源。但是,Linux中的errno == 9 == EBADF
。这意味着您的文件描述符(fd
)不正确。
我建议您使用类似
的内容,而不是仅打印errno
if (...) {
const int errnum = errno;
fprintf(stderr, "%s: tcsetattr() failed: %s (%d)\n", devicepath, strerror(errnum), errnum);
exit(EXIT_FAILURE);
}
其中devicepath
是包含您正在使用的串行设备路径的变量。 (您需要#include <string.h>
为strerror()
,#include <errno.h>
为errno
,#include <stdlib.h>
和exit()
为EXIT_FAILURE
。)