fopen()不适合串口吗?

时间:2015-03-30 13:33:47

标签: c serial-port fopen file-descriptor

我尝试通过fopen("serial port path", "+w")

打开串口

通过fileno()获取文件描述符。

之后,我致电tcsetattr(),但会生成错误,显示Inappropriate ioctl for deviceperror()打印错误消息)

我知道我可以使用open()fopen()并使用相同的代码。

但我很好奇什么是问题。

FILE* file = fopen("serialDevice", "w+");

fd = fileno(file);
if(fd < 0){
    perror("fileno error");
}
struct termios conf;

//setting conf.....

if(tcsetattr(fd, TCSANOW, &conf) != 0){
    perror("tcsetattr() failed");
    exit(1);
}

1 个答案:

答案 0 :(得分:-3)

与您的问题相关的open和fopen之间的唯一区别是fopen默认情况下会进行缓冲。这个可能是您的问题。

您可以尝试禁用缓冲区并查看是否有帮助,在您打开文件后添加:setbuf(f, NULL);并查看它是否有帮助。