gpt4 book ai didi

c - 当有一些数据要读取时,select() 会阻塞

转载 作者:太空宇宙 更新时间:2023-11-04 06:20:03 25 4
gpt4 key购买 nike

我正在尝试在串行端口上实现阻塞读取。我有以下代码

int blocking_read(int input_fd,int wait_time){
if(wait_time <= 0) return 0;
fd_set set;
FD_ZERO(&set);
FD_SET(input_fd,&set);
struct timeval wait_time_struct;
wait_time_struct.tv_sec = wait_time / 1000000;
wait_time_struct.tv_usec = wait_time % 1000000;
int ret = select(1,&set,NULL,NULL,&wait_time_struct);
char a;
int check=read(input_fd,&a,1);
printf ("ret %d, check %d %02x\n",ret,check,a&0xFF);
return ret;
}

最后 4 行只是为了调试...当我在循环中期望串口上有消息时运行此命令时,输出为:

ret 0, check 1 ff
ret 0, check 1 ff
ret 0, check 1 c4
ret 0, check 1 d7
ret 0, check 1 00
ret 0, check 1 01
...

我期望的消息是 FF FF C4 D7 00 01.... 很明显,select() block 即使有东西要读...... . 你能帮帮我吗?

最佳答案

我应该这样使用选择:

int ret = select(input_fd +1,&set,NULL,NULL,&wait_time_struct); 

参数名称 nfds 让我有点困惑,它看起来就像集合中的一些文件描述符。来自手册

nfds 是三组中编号最大的文件描述符加 1。

关于c - 当有一些数据要读取时,select() 会阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37027594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com