fs_sel = select(fd+1,&fs_read,NULL,NULL,&time);
时间: 2024-04-07 19:31:25 浏览: 60
这段代码调用了 `select()` 函数,它的参数含义如下:
- `fd+1`:最大文件描述符值加一,表示要监视的文件描述符的范围是从 0 到 `fd`。
- `&fs_read`:指向 fd_set 类型的指针,表示要监视可读事件的文件描述符的集合。在 `select()` 函数返回时,该集合中会包含有可读事件发生的文件描述符。
- `NULL`:指向 fd_set 类型的指针,表示要监视可写事件的文件描述符的集合。在本例中,我们不关心可写事件,因此设置为 `NULL`。
- `NULL`:指向 fd_set 类型的指针,表示要监视异常事件的文件描述符的集合。在本例中,我们不关心异常事件,因此设置为 `NULL`。
- `&time`:指向 timeval 结构体的指针,表示 `select()` 函数的超时时间。如果在超时时间内没有任何事件发生,`select()` 函数会返回 0。如果设置为 `NULL`,则 `select()` 函数将一直等待,直到有事件发生。
`select()` 函数的返回值是就绪文件描述符的个数。在本例中,它将返回发生可读事件的文件描述符的个数,存储在 `fs_sel` 变量中。
相关问题
fs_sel = select(fd+1,&fs_read,NULL,NULL,&time); 函数原型
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
其中,nfds 是需要检查的文件描述符数量加 1;readfds、writefds 和 exceptfds 分别是需要检查读、写和异常情况的文件描述符集合,如果不需要检查,就传入 NULL;timeout 是超时时间,如果不需要超时限制,就传入 NULL。函数返回值为就绪文件描述符的数量,如果超时时间到达,返回值为 0,如果出错,返回值为 -1。
int read_datas_tty(int fd, char *rcv_buf,int data_len,int mstimeout) { int len,fs_sel; fd_set fs_read; struct timeval time; memset(rcv_buf,0,sizeof(rcv_buf)); #if 1 FD_ZERO(&fs_read); FD_SET(fd,&fs_read); time.tv_sec = mstimeout/1000; time.tv_usec = (mstimeout%1000)*1000; fs_sel = select(fd+1,&fs_read,NULL,NULL,&time); if(fs_sel) { len = read(fd,rcv_buf,data_len); if(len == 0) return 0; ///printf("%s:%d recv buff[len = %d] is %s \r\n",__FUNCTION__,__LINE__,len,rcv_buf); ///print_payload(rcv_buf,len); return len; } else { //printf("failed [%s : %d]\r\n",__FUNCTION__,__LINE__); return 0; } #endif #if 0 printf("%s:%d \r\n",__FUNCTION__,__LINE__); len = read(fd,rcv_buf,data_len); if(len > 0) { printf("%s:%d recv buff[len = %d] is %s \r\n",__FUNCTION__,__LINE__,len,rcv_buf); print_payload(rcv_buf,len); return len; } else{ printf("failed [%s : %d]\r\n",__FUNCTION__,__LINE__); return 0; } #endif }
这是一个从串口中读取数据的函数,该函数的参数包括串口文件描述符fd、接收缓存区rcv_buf、数据长度data_len和超时时间mstimeout。该函数首先使用select函数进行等待,等待串口上有数据可读或者超时,如果有数据可读,就使用read函数从串口中读取数据,将读取到的数据保存到接收缓存区中,并返回读取到的数据长度。如果等待超时或者读取失败,就返回0。该函数使用了两个条件编译的方式,可以根据需要选择使用哪一部分代码。
阅读全文