如何阻止poll
,以便仅在我们按下键盘按钮时才会激活它。
因为没有事件就一个人继续。
我已经阅读了所有手册。
while(i<5){
struct pollfd fds[2];
int timeout_msecs = 500;
int ret;
fds[0].fd=STDIN_FILENO;
fds[0].events=POLLIN | POLLWRBAND | POLLHUP;
ret = poll(fds, 2, -1);
snprintf(buffer, 12,"%d",ret);
//write_raw(7,i,"z",1);
if(ret > 0) {
// write_raw(3,i,"a",1);
if (fds[0].revents & POLLIN) {
// write_raw(4,i,"b",1);
// write_raw(3,1,buffer,1);
posx=posx-1;
write_raw(posy,posx,"_|_",3);
sleep(5);
fds[0].events = POLLHUP;
}
if(fds[0].revents & POLLHUP){
write_raw(4,i,"a",1);
}
}
fds[0].events=NULL;
i++;
}
答案 0 :(得分:0)
您只有1个要监视事件的文件描述符,但是你告诉poll()你有2.你需要做
ret = poll(fds, 1, -1);
当您可以将紧急数据写入标准输入时,您无法获取事件(无论这意味着什么,所以
fds[0].events=POLLIN | POLLHUP;
这没有任何意义
fds[0].events=NULL;
删除该行。
您的下一个问题是您注册了阅读活动。但你从来没有读过关于stdin的任何输入。如果有可用数据,您将每次都获得一个事件,直到您实际读取所有可用数据。
您的问题表明您希望获得键盘事件,您可以通过读取数据获得该事件,但您的代码主要调用write_raw()函数,这听起来像是写入数据而不是读取数据。