打印
[技术问答]

打开串口设备使用O_NDELAY和O_NONBLOCK的区别

[复制链接]
589|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
两只袜子|  楼主 | 2023-9-1 15:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
打开串口设备使用O_NDELAY和O_NONBLOCK的区别

使用特权

评论回复
沙发
riplay| | 2023-9-4 09:23 | 只看该作者
O_NONBLOCK和O_NDELAY所产生的结果都是使I/O变成非阻塞模式(non-blocking),在读取不到数据或是写入缓冲区已满会马上return,而不会阻塞等待。

它们的差别在于:在读操作时,如果读不到数据,O_NDELAY会使I/O函数马上返回0,但这又衍生出一个问题,因为读取到文件末尾(EOF)时返回的也是0,这样无法区分是哪种情况。因此,O_NONBLOCK就产生出来,它在读取不到数据时会回传-1,并且设置errno为EAGAIN。

使用特权

评论回复
板凳
suw12q| | 2023-9-12 12:26 | 只看该作者
O_NDELAY和O_NONBLOCK是两个常用的标志位,用于设置串口的非阻塞模式

使用特权

评论回复
地板
w2nme1ai7| | 2023-9-12 13:30 | 只看该作者
这个O_NDELAY用于在打开串口设备时禁用数据传输的延迟

使用特权

评论回复
5
tax2r6c| | 2023-9-12 14:38 | 只看该作者
你如果使用O_NDELAY标志位打开串口设备,那么读取和写入操作将立即返回,无论是否有数据可用或是否可以写入数据

使用特权

评论回复
6
lamanius| | 2023-9-12 15:34 | 只看该作者
O_NDELAY在读取或写入数据时,程序不会被阻塞,而是立即返回

使用特权

评论回复
7
cen9ce| | 2023-9-12 17:08 | 只看该作者
O_NONBLOCK一般用于设置串口设备为非阻塞模式。在非阻塞模式下,读取和写入操作将立即返回,无论是否有数据可用或是否可以写入数据

使用特权

评论回复
8
b5z1giu| | 2023-9-12 18:16 | 只看该作者
这个还得看你实际情况的,如果需要阻塞用O_NDELAY否则用O_NONBLOCK

使用特权

评论回复
9
lix1yr| | 2023-9-13 07:15 | 只看该作者
其实O_NONBLOCK可以用于其他类型的文件描述符,而不仅仅是串口设备

使用特权

评论回复
10
su1yirg| | 2023-9-13 09:31 | 只看该作者
这是配置串口的接收方式的吧

使用特权

评论回复
11
l1uyn9b| | 2023-9-13 11:26 | 只看该作者
一般O_NDELAY和O_NONBLOCK都用于设置串口设备为非阻塞模式,但O_NONBLOCK标志位更通用,可以用于其他类型的文件描述符

使用特权

评论回复
12
d1ng2x| | 2023-9-13 12:42 | 只看该作者
其实我用的阻塞式还是比较多,哈哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2039

主题

7368

帖子

10

粉丝