c - Linux - 串口行为不同于套接字

标签 c linux sockets nonblocking

我在非阻塞模式下打开了/dev/ttyACM0

我正在使用select 来了解数据何时可用。

select返回时,我可以用read函数读取串口到达的所有数据。

问题是如果我尝试读取更多数据,read 返回 0

这不是正确的行为。

解释:

当以非阻塞模式打开套接字时,select在数据可用时返回,并且可以调用read函数来检索数据。

但是,在没有数据可读的套接字上调用read 将导致read 返回-1,而不是0 .

相关的 errnoEWOULDBLOCK,这是正确的。

在串口描述符的情况下,除了read在没有数据时返回0errno也是0

对于套接字,read 返回 0 表示远程已关闭 session 的末端,这应该是您关闭连接的本地端的时刻.

实际上,串口读取返回0,但该端口被关闭。

有没有办法初始化 comm 端口,使它的行为与套接字相同?

谢谢

最佳答案

如果您只是想要一种方法来区分设备移除(从父总线拔下串行端口,例如 USB,或强制卸载驱动程序)和无数据,请调用其结果不依赖于接收缓冲区的 API。

例如,tcgetattr 应该成功,不管有没有数据,只要设备还存在。

如果要检测串行电缆的断开,则需要硬件握手或超时。

关于c - Linux - 串口行为不同于套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49135953/

相关文章:

c - SIGALRM 警报仅跳过 getchar 一次

C++ .hpp 和 .cpp

linux - 排序命令的用法是什么?

java.net.SocketException : Connection reset by peer: socket write error When serving a file 异常

c - 在相同偏移量的两个整数中快速搜索一些半字节(C,微优化)

我可以在 C 中使用类型转换来获取指向地址的指针的内存大小吗?

除非您转到脚本所在的文件夹,否则 PHP 命令不起作用

c - Errno : 11, 资源暂时不可用

java - 使用 JDBC arraylist 进行简单的套接字编程和线程

无法正确对齐 printf 代码