读取一个文件,并开启非阻塞式
-
O_RDONLY:只读
-
O_NONBLOCK:非阻塞
代码编写
int fd;
int init_read()
{
int fd = open("/dev/input/event1", O_RDONLY | O_NONBLOCK);
if(fd == -1)
return -1;
return 0;
}
int btns_read(int fd, btn_code_t *code, btn_event_t *event)
{
struct input_event ev; // 输入事件
ssize_t n = read(fd, &ev, sizeof(ev));
if (n < 0) { //1.是否有错
if (errno == EAGAIN || errno == EWOULDBLOCK)
return 0;
return -1;
}
if ((size_t)n < sizeof(ev)) //2.返回的数据是不是input_event
return -1;
if (ev.type != EV_KEY) //3.如果是按钮才执行
continue;
//4.参数传递回去
*code = ev.code;
*event = ev.value ? BTN_PRESSED : BTN_RELEASED;
printf("btns: fd=%d ev.code=%u ev.value=%d -> btn=%d\n",
fd, (unsigned)ev.code, ev.value, (int)c);
fflush(stdout); // 5.fflush 保证日志不卡在缓冲区里
return 1;
}
解析
- 开启一个文件设置为非阻塞模式。