linux下串口收发的问题,下面一段代码,select返回的始终是0,程序处于阻塞状态,无法读到数据,在线等

linux下串口收发的问题,下面一段代码,select返回的始终是0,程序处于阻塞状态,无法读到数据,在线等,第1张

1. 确认是否成功打开的串口设备?

2. 确认打开串口后, 是否设置了波特率等一系列的参数?

3. 确认是否可成功写入?

4. 尝试使用poll 来代替select. 对于系统设备, 有时select不能正常工作而poll是可以的。

没办法保证能够一次全部接收,只能自己缓存起来处理。比如,发送数据时候增加带有长度的数据头以及末尾的校验,用 select 对串口做非阻塞读取,读到数据后检查是否完整,不完整就接着读,直到获得完整数据再处理。

select系统调用的作用就是让程序在多个文件描述符上进行等待,而套接字也是属于文件描述符的一种,所以服务器程序就可以利用select系统调用,在多个套接字上等待客户端请求,从而达到同时处理多个客户端的效果,而等待客户端请求就需要用listen调用对客户端进行监听,select调用检测的当然就是监听套接字咯。

select系统调用是检测一个已打开的文件描述符的集合(这个集合是一个fd_set类型的数据结构),服务器程序需要创建这个集合,创建时需要用listen调用让套接字处于监听状态,只有这样当有一个新的连接发生时,描述符才会有活动发生,才能够被检测到。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7628885.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-08
下一篇2023-04-08

发表评论

登录后才能评论

评论列表(0条)

    保存