select() 没有响应 /dev/input/mice 上的写入

2023-12-15

我正在编写一个程序来监视select()键盘和鼠标设备文件。它等待这些文件上的任何写入操作(这应该在有击键或鼠标移动时发生),并且一旦有写入操作,就会执行一些作业。

但这不起作用。我的代码如下。

#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<linux/input.h>
#include<linux/uinput.h>
#include<sys/time.h>
#include<unistd.h>

void main()
{
    int mouse_fd,kbd_fd,fd_max;
    struct input_event ev;
    fd_set rfs,wfs;

    if((mouse_fd=open("/dev/input/event3",O_WRONLY))==-1)
            {
                printf("opening mouse device file has failed \n");
            }
    else
            {
                printf("opening mouse device file has been successfull \n");
            }
    if((kbd_fd=open("/dev/input/event2",O_WRONLY))==-1)
            {
                printf("opening keyboard device file has failed \n");
            }
    else
        {
            printf("opening keyboard device file has been successfull \n");
        }

    FD_ZERO(&rfs);
    FD_ZERO(&wfs);
    FD_SET(mouse_fd,&rfs);
    FD_SET(kbd_fd,&rfs);
    FD_SET(mouse_fd,&wfs);
    FD_SET(kbd_fd,&wfs);

    if(mouse_fd>kbd_fd)
        {
            fd_max=mouse_fd;
        }
    else
        {
         fd_max=kbd_fd;
        }

    while(1)
    {
        select((fd_max+1),&rfs,NULL,NULL,NULL);
        sleep(2);
        if(FD_ISSET(mouse_fd,&rfs))
            {
                printf("test mouse \n");
            }
        if(FD_ISSET(kbd_fd,&rfs))
            {
                printf("test keyboard \n");
            }
   }
}

当我执行该程序时,它会产生这样的输出,

[root@localhost Project]# gcc select.c
[root@localhost Project]# ./a.out
opening mouse device file has been successfull 
opening keyboard device file has been successfull 
test keyboard 
test keyboard 
test keyboard 
test keyboard 
test keyboard 
test keyboard 
test keyboard 
test keyboard 
test keyboard

即使我没有按任何键。此外,即使存在物理鼠标移动,鼠标设备文件也不会被 select() 选择。

我究竟做错了什么?


您需要在每次之前重新初始化您的 fd 集select称呼。因此,程序中的循环将如下所示:

while(1)
{
    FD_ZERO(&rfs);
    FD_ZERO(&wfs);
    FD_SET(mouse_fd, &rfs);
    FD_SET(kbd_fd, &rfs);
    FD_SET(mouse_fd, &wfs);
    FD_SET(kbd_fd, &wfs);

    select((fd_max+1),&rfs,NULL,NULL,NULL);

    // proceed normally
}

另外,每User1 在 Stack Overflow 上对您的同一问题的评论,您需要打开设备进行读取,因为您正在尝试从中读取数据:

// Open device for reading (do you mean to use "/dev/input/mice" here?)
if ((mouse_fd = open("/dev/input/event3", O_RDONLY)) == -1)

Linux 包括一个选择图(2)教程手册页,包含如何使用的说明select以及一个可作为参考的示例程序。 “Select Law”#11 提醒您,在每次调用之前您需要重新初始化您的 fd 集select.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

select() 没有响应 /dev/input/mice 上的写入 的相关文章

  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • 将数组向左或向右旋转一定数量的位置,复杂度为 o(n)

    我想编写一个程序 根据用户的输入 正 gt 负 include
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • webview_flutter:未捕获(承诺中)NotAllowedError:写入权限被拒绝

    预期行为 使用复制文本Copy to clipboard从网站 行为 它会抛出以下错误 并且文本不会复制到 android 剪贴板 包 webview flutter I chromium 12065 INFO CONSOLE 0 Unca
  • Excel VBA - 退出for循环

    我想退出我的for当满足内部条件时循环 我怎样才能退出我的for循环时if条件已满足 我认为在我的人生结束时会有某种出口if声明 但不知道这将如何运作 Dim i As Long For i 1 To 50 Range B i Select
  • 使用 dataTable.js Bootstrap 表排序、过滤、分页

    我正在开发 asp net MVC 5 并创建了一个 Bootstrap 表来显示数据 现在我想应用分页 过滤和排序 为此我搜索了五篇文章并找到了这个链接 此链接中的技术非常简单 与我在项目中所做的相同 下面我已经包括了我的 js and
  • C 如何计算 sin() 和其他数学函数?

    我一直在研究 NET 反汇编和 GCC 源代码 但似乎找不到任何实际实现sin 和其他数学函数 它们似乎总是引用其他东西 谁能帮我找到他们吗 我觉得不太可能所有运行C的硬件都支持硬件中的三角函数 所以必须有一个软件算法某处 正确的 我知道有
  • “尽早失败”这句话是什么意思?您想什么时候这样做?

    尽早失败 这个表达是什么意思 在什么情况下这种方法最有用 什么时候你会避免这种方法 本质上 快速失败 又名早早失败 是对您的软件进行编码 以便 当出现问题时 软件会失败立刻 and 明显地如可能的 而不是试图在可能不稳定的状态下继续进行 快
  • 在Python中,如何将数字和字符串转换为字节数组?

    我想将一组配置选项编码为一长串十六进制数字 输入是数字 整数和浮点数 和字符串的混合 我可以用binascii a2b hex从字符串的标准库 整数的按位运算符 如果我去阅读一些关于浮点表示的内容 叹气 我可能也可以处理浮点数 现在 我的问
  • iOS Sprite Kit 碰撞与元素移动

    是否可以使用 Sprite 套件的物理主体进行元素碰撞并仍然允许元素相互穿过 我感兴趣的是仅当两个边界相互碰撞时才调用委托 然后允许它们相互穿过 是的 这是可能的 您可以注册对象之间碰撞的回调 但不会让碰撞影响对象本身 Raywenderl
  • 右键单击 Silverlight 4 应用程序中的列表框

    我正在尝试在 Winforms 应用程序中实现我以前认为理所当然的功能 我是一名 Silverlight 菜鸟 所以希望这一切都是基础知识 我在 Silverlight 4 应用程序中有一个列表框 我想做以下事情 右键单击列表框 让该项目位
  • 为什么 Promise 是 Monad?

    我一直在学习函数式编程 并且接触过 Monad Functor 和 Applicatives 根据我的理解 以下定义适用 a A gt B gt C A gt C B 函子 b A gt C B gt C A gt C B 单子 c C A
  • JQuery关键字“this”没有获取属性值

    我正在使用 JQuery 关键字 this 我遇到了一些我不明白的事情 这是我的代码 a jQuery com a
  • 如何使用 createBottomTabNavigator 对 React Navigation 过渡进行动画处理?

    我花了最后一天的时间试图找出如何使用反应导航实现简单的淡入淡出屏幕转换 但我找不到一种方法让它与底部选项卡导航器一起使用 有人可以帮我吗 我已经广泛阅读了文档 但动画似乎只能通过堆栈导航器使用 你能在这个小吃演示中进行过渡吗 只需创建一个A
  • Python 2.7 和 PyDev - matplotlib 和 NumPy 不起作用

    我正在尝试使用 Python 2 7 和 Eclipse 以及 PyDev 插件让 matplotlib 在 Windows 7 64 位 下工作 我安装了 NumPyhttp www lfd uci edu gohlke pythonli
  • 访问本地类中的隐藏变量

    我是 Java 新手 我对下面的示例感到困惑 public class Test int testOne member method int x 5 class inTest local class in member method voi
  • Python石头剪刀布游戏

    我正在使用Python 我正在尝试编写一个简单的程序来模拟石头 剪刀 布游戏 一切正常 除了当我收到此错误时输入无效响应 石头 布或剪刀以外的其他内容 时 Traceback most recent call last File C Use
  • SpriteKit 游戏中的 AVAudioPlayer 和性能问题

    我在使用 AVAudioPlayer 和在 spritekit 游戏中播放短声音时遇到问题 我有相当动态的游戏场景 当用户点击特定元素时 我想播放简单的 嘟嘟 声音 但我注意到使用 AVAudioPlayer 执行声音会导致严重的性能问题
  • flutter:参数格式不正确

    我是 Flutter 新手 今天我一直遇到一个问题 我无法调试我的应用程序 因为它说参数格式不正确 Parameter format not correct FAILURE Build failed with an exception Wh
  • httpurlconnection线程安全

    HttpUrlConnection 线程安全吗 IE 如果我有一个连接到服务器的 HttpConnection 实例 并且该实例由不同的线程使用 例如尝试同时发送 POST HttpUrlConnection 将如何处理这种情况 a 他们会
  • 如何将表格包裹在链接中?

    哪些元素允许链接 我想要wrap围绕 a 的链接table a href 123 php class grap table border 1 style width 600px height 600px tbody tr td align
  • MongoDB节点检查objectid是否有效

    如何使用 Node 的驱动程序检查 ObjectID 是否有效 我试过 var BSON mongo BSONPure console log Validity BSON ObjectID isValid ddsd 但我不断收到异常 而不是
  • select() 没有响应 /dev/input/mice 上的写入

    我正在编写一个程序来监视select 键盘和鼠标设备文件 它等待这些文件上的任何写入操作 这应该在有击键或鼠标移动时发生 并且一旦有写入操作 就会执行一些作业 但这不起作用 我的代码如下 include