当前位置: 技术问答>linux和unix
非阻塞打开设备文件,如果1秒read不到数据,想让read退出如何做?
来源: 互联网 发布时间:2015-12-31
本文导语: 现在是这样,从一个设备读数据,读不到数据的时候,read会一直阻塞住,如何中止read呢? 请大家稍微提示下把。顶贴有分 | 用select 吧 man select 里面有个范例. #include ...
现在是这样,从一个设备读数据,读不到数据的时候,read会一直阻塞住,如何中止read呢?
请大家稍微提示下把。顶贴有分
请大家稍微提示下把。顶贴有分
|
用select 吧
man select
里面有个范例.
#include
#include
#include
#include
int
main(void) {
fd_set rfds;
struct timeval tv;
int retval;
/* Watch stdin (fd 0) to see when it has input. */
FD_ZERO(&rfds);
FD_SET(0, &rfds);
/* Wait up to five seconds. */
tv.tv_sec = 5;
tv.tv_usec = 0;
retval = select(1, &rfds, NULL, NULL, &tv);
/* Don’t rely on the value of tv now! */
if (retval == -1)
perror("select()");
else if (retval)
printf("Data is available now.n");
/* FD_ISSET(0, &rfds) will be true. */
else
printf("No data within five seconds.n");
return 0;
}
man select
里面有个范例.
#include
#include
#include
#include
int
main(void) {
fd_set rfds;
struct timeval tv;
int retval;
/* Watch stdin (fd 0) to see when it has input. */
FD_ZERO(&rfds);
FD_SET(0, &rfds);
/* Wait up to five seconds. */
tv.tv_sec = 5;
tv.tv_usec = 0;
retval = select(1, &rfds, NULL, NULL, &tv);
/* Don’t rely on the value of tv now! */
if (retval == -1)
perror("select()");
else if (retval)
printf("Data is available now.n");
/* FD_ISSET(0, &rfds) will be true. */
else
printf("No data within five seconds.n");
return 0;
}
|
非阻塞打开设备文件?什么意思?
既然它是非阻塞的为什么又“一直阻塞住”,请明示
不知道你怎么打开的设备文件,一般是用ioctl来设置文件描述符的属性的
一般select是使用在阻塞式上的
既然它是非阻塞的为什么又“一直阻塞住”,请明示
不知道你怎么打开的设备文件,一般是用ioctl来设置文件描述符的属性的
一般select是使用在阻塞式上的