C 利用投票进行分组投票
如何阻止C 利用投票进行分组投票,c,C,如何阻止轮询,使其仅在按下键盘按钮时激活 因为这是无事件的孤独 我已经阅读了所有的手册 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); snpr
轮询
,使其仅在按下键盘按钮时激活
因为这是无事件的孤独
我已经阅读了所有的手册
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++;
}
while(i 0){
//写(3,i,“a”,1);
if(fds[0]。revents和POLLIN){
//写出(4,i,“b”,1);
//写_raw(3,1,缓冲区,1);
posx=posx-1;
写原始的(posy,posx,“| | |”,3);
睡眠(5);
fds[0]。事件=POLLHUP;
}
if(fds[0]。revents和POLLHUP){
写出原始的(4,i,“a”,1);
}
}
fds[0]。事件=NULL;
i++;
}
您只有1个要监视事件的文件描述符,但您告诉poll()您有2个。你需要做什么
ret = poll(fds, 1, -1);
当您可以向stdin写入紧急数据时,获取事件是没有用的(不管这意味着什么,所以
fds[0].events=POLLIN | POLLHUP;
这毫无意义
fds[0].events=NULL;
拆下那条线
您的下一个问题是注册读取事件。但是您从未在stdin上读取任何输入。如果有可用数据,您每次都会收到一个事件,直到您实际读取所有可用数据为止
您的问题指出,您希望获取键盘事件,您可以通过读取数据来获取,但您的代码大多具有对write_raw()的调用函数,听起来像是写入数据而不是读取数据。请添加一些示例代码来澄清您的问题,因为它是不可理解的stands@Ramj然后您需要调试正在发生的事情。找出poll()返回的内容。找出在
fds[0]中返回的事件.revents
。如果您告诉我们您所做的事情、正在发生的事情以及预期会发生的事情,您也会得到更好的帮助。检查如果poll()会出现什么错误
返回-1
将是一个良好的开端。如果您故意不检查错误,那么当您的代码不能按预期工作时,您就没有资格感到惊讶。