在串行通信的情况下,来自tcgetattr的错误9是什么

时间:2015-03-12 10:48:27

标签: c linux

我制作一个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)中。我无法将其删除。请帮忙。谢谢!

1 个答案:

答案 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。)