如何在 Unix 中从键盘设备捕获用户输入?

2024-03-15

我想从键盘设备捕获所有用户输入,一次读取一个字节。我编写了以下代码,但它不起作用:

if ((fd = open("/dev/char", O_RDONLY) != 1) {
    tty = open("/dev/tty", O_RDONLY);
    tcsetattr(0, TCSANOW, &orig_info);
    read (fd, &buf, sizeof(char));
}
close(fd);

我预计终端会等待输入,但它没有。


键盘设备本身是其中的条目之一/dev/input。您可以通过连接类型(例如 PS/2、USB 等)在以下位置找到键盘和其他输入设备:/dev/input/by-path。显然,您需要以 root 身份运行才能直接访问硬件,并且您需要提供自己的翻译,将来自键盘的原始字节转换为按键和按键释放等内容。这可能不是您想要的。

如果您正在运行 GUI 应用程序,则低级方法是调用XNextEvent http://www.x.org/releases/X11R7.7/doc/man/man3/XNextEvent.3.xhtml以及同一家族中的其他职能。解码输入事件并不完全是微不足道的,因为它取决于应用程序来应用修饰符。 GUI 框架(Motif、Gtk、Qt...)会对您有所帮助。

如果您正在运行终端应用程序,请从标准输入或从/dev/tty (/dev/tty始终是程序运行所在的终端,即使标准输入已被重定向)。你需要将终端放入raw mode https://en.wikipedia.org/wiki/POSIX_terminal_interface#Early_Unices:_Seventh_Edition_Unix。您将获得解码的字符键和功能键(主要作为转义序列)。在这方面,图书馆也能有所帮助;事实标准是ncurses http://en.wikipedia.org/wiki/Ncurses.

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

如何在 Unix 中从键盘设备捕获用户输入? 的相关文章

  • Qt 的 sysroot 和前缀选项的实际示例是什么

    我正在查看可以运行的所有选项configureQt 提供的脚本 特别是 qt everywhere opensource src 5 2 0 经过大量搜索后 我确定这些东西充其量记录很少 所以我希望我能得到一些帮助 当我查看描述时prefi
  • 限制特定设备销售应用程序?

    是否可以通过特定设备或设备的功能 屏幕分辨率 处理器 磁盘空间等 来限制 Android Market 上应用程序的销售 我知道我会受到人们的轰炸 他们说如果你的应用程序设计得好 它应该能够在任何尺寸的设备上运行 这一切都很好 但出于某些原
  • Bash 脚本 Mysql 警告:在命令行界面上使用密码可能不安全

    你好 我有一个脚本来对一些 mysql 数据库进行分区 我们正在从 5 5 升级到 5 6 在测试脚本时 我注意到新的 5 6 版本 mysql 返回Warning Using a password on the command line
  • 如何找到某个命令的目录?

    我知道 当您使用 shell 时 唯一可以使用的命令是可以在 PATH 上设置的某些目录中找到的命令 即使我不知道如何查看 PATH 变量上的目录 这是另一个可以回答的好问题 我想知道的是 我来到 shell 并写道 lshw 我想知道 s
  • 使用端口 80 (Ubuntu / Linode) 运行 Node.js 的最佳实践 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在设置我的第一个Node js服务器上的cloud Linux node我对以下细节还很陌生Linux admin 顺便说一句 我并没有尝试
  • php.ini 更改,但在 Ubuntu 上无效

    我想更改 PHP 上传文件大小的限制 这是我的输出的一些信息phpinfo https www php net manual en function phpinfo php Configuration File php ini Path e
  • 在C中获取终端宽度?

    我一直在寻找一种从 C 程序中获取终端宽度的方法 我不断想出的是这样的东西 include
  • 如何在 Linux 中检测通过 GUI 登录的用户

    我想在我的程序中捕获通过 GUI 登录的用户名 我的程序作为守护进程从 root 登录运行 如果非 root 用户通过 GUI 登录 我的程序应该会收到通知 我正在粘贴我当前的程序 该程序调用一个 perl 脚本 利用系统调用来检查当前登录
  • 在我的 Linux 机器上安装 lisp

    我使用 Vim 作为我的编辑器 Practical common Lisp 建议安装 Lispbox 我不知道如何使用 emacs 不知道如何用那个 T T 运行 lisp 代码 之后我找到了一个名为 limp vim 的 vim lisp
  • 哪个信号被传递到信号处理程序中死锁的进程

    我有一个来自调用信号处理程序后死锁的进程的核心转储 如何确定传送了哪个信号以及是谁发送的 GDB 为接收信号的线程生成的回溯如下 信号处理程序在第 15 帧中被调用 gdb bt 0 0x00007fa9c204654b in sys fu
  • 旋转时键盘隐藏

    我正在开发 iPad 应用程序 在其中一个视图中 我有一个子视图 它在按钮点击事件时出现和消失 子视图包含一个UITextView 默认情况下 我将其设置为第一响应者 以便在视图出现时键盘立即出现 子视图也会消失UIKeyboardWill
  • 在大型文本文件中查找重复记录

    我在一台 Linux 机器 Redhat 上 并且有一个 11GB 的文本文件 文本文件中的每一行包含单个记录的数据 并且该行的前 n 个字符包含该记录的唯一标识符 该文件包含略多于 2700 万条记录 我需要验证文件中不存在具有相同唯一标
  • 由于参数中有空格,Bash 脚本因未知选项而失败

    我正在尝试运行 aws create lambda 函数 事情的经过如下 eval aws lambda create function function name FUNCTION NAME runtime RUNTIME role RO
  • 启动jetty服务器时出现NoClassDefFoundError

    我正在尝试在码头服务器中托管我的网络应用程序 spring 我将 war 文件复制到 jetty 服务器中的 webapp 文件夹中 我并不是想嵌入jetty服务器 而是试图在jetty内托管应用程序 如tomcat 我没有安装jetty
  • Bash 变量:区分大小写?

    Bash shell 脚本区分大小写吗 是可变的date与DATE 是的 它区分大小写 就像 UNIX 的其余部分一样 date and DATE是两个不同的变量 makefile and Makefile是两个不同的文件 h and H是
  • PyGTK+3(PyGObject)创建屏幕截图?

    我过去 3 天在 google 上搜索 如何使用 PyGTK 3 创建屏幕截图 有关于 pyqt pygtk 2 wx 和 PIL 的 gallizion 教程 顺便说一句 我不需要 scrot imlib2 imagemagick 等外部
  • 为什么我的 Java 代码执行 bash 命令不正确?

    我试图让我的 Java 程序与 Linux bash 交互 但出了问题 我有一个简单的可执行文件prog从中读取一个整数stdin并输出其平方 执行中 echo 5 prog 从 bash 本身打印正确答案25 in stdout但运行 i
  • 如何测试包含应用程序是否授予“允许完全访问”权限?

    我正在开发一个键盘扩展项目 在应用程序代码的某些点 我需要测试用户是否已授予键盘扩展的 允许完全访问 权限 协议是我需要从应用程序端进行这些测试 并在此基础上让用户访问键盘设置或在未授予权限的情况下提醒他 问题是这里提供的方法如下 func
  • 使用 perf 查找线程瓶颈并优化挂机时间

    对 cpu 周期进行采样perf record如果核心利用率大致恒定 则对于寻找优化候选非常有用 但对于具有并行性不同的多个阶段的代码 计算 cpu 周期将重点强调并行阶段 而低估影响挂机时间的顺序或有限并行阶段 简而言之 天真的 perf
  • 在ubuntu 18.04上安装python 2.7

    有没有办法在 Ubuntu 18 04 上安装 Python 2 7 我尝试了这个命令 但它不起作用 sudo apt install python minimal 有没有办法手动安装 我尝试使用 python 2 7 作为不支持 pyth

随机推荐

  • 使用 alamofire 的多部分/表单数据

    我正在进行 post API 调用 并且需要使用 multipart form data 我知道如何使用 JSON 进行调用 但我不熟悉 multipart form data 使用 JSON 这是一个超级简单的调用 只需创建一个类型参数
  • 用于更新 JTable 中给定单元格/列并增加焦点的侦听器类型

    我正在尝试使用预定义第一列的 JTable 用户仅将数据输入到第二列 数量 然后 我通过将 服务 列和 数量 列相乘来计算最终收入 并将其显示在第三列 收入 中 Service Quantity Income 40 00 X 40 00 3
  • Java:HashMap 大小是“质数”还是“2 的幂”?

    许多书籍和教程都说哈希表的大小必须是素数才能将键均匀分布在所有桶中 但是Java的HashMap始终使用 2 的幂的大小 难道不应该使用素数吗 作为哈希表大小 质数 或 2 的幂 哪个更好 使用 2 的幂可以有效地屏蔽哈希码的最高位 因此
  • Blend 2 sp1 中的 WPF 视觉状态管理器

    谁能向我解释如何让视觉状态管理器与 WPF 应用程序一起使用 它刚刚被添加到新的 wpftoolkit 中 我按照说明安装了它 但即使是示例也没有显示 VSM 在 silverlight 中它可以工作 但在 WPF 中不行 如果安装了最新的
  • Oracle 上个月的日期函数

    我有下面的查询 其中日期是硬编码的 我的目标是删除编码日期 查询运行时应提取上个月的数据 select count distinct switch id from email protected cdn cgi l email protec
  • a:active a href 不起作用

    我正在尝试在 a href 上应用 css 基本上我需要在单击 a href 时应用与悬停相同的样式以指示用户所在的页面 有任何想法吗 active意思是 被点击 或以其他方式激活 时 它并不意味着 链接到当前页面 CSS 与之最接近的是
  • 更改 UICollectionViewCell 中的标签位置

    我们有一个UICollectionView故事板上有一个原型单元 该细胞有一个UILabel label 其中 其定位没有自动布局 我们有条件地设置标签的框架 collectionView cellForItemAtIndexPath 像这
  • 根据 Beautifulsoup 中的内容排除标签

    我正在抓取类似于以下内容的 html 数据 div class target content p the content of the p p p the content of the p p p p div
  • G++ CAS (__sync_val_compare_and_swap) 问题需要解释

    这让我很头疼 我正在尝试实现一些 无锁 代码 并使用 CAS gcc sync val compare and swap 来完成繁重的工作 我的问题可以用下面的代码来显示 volatile bool lock void locktest v
  • 如何使用 vba 更新 powerpoint 2010 中嵌入的 Excel 链接

    我的问题是我已将图表粘贴到微软幻灯片软件 questions tagged powerpoint我正在尝试通过 Excel VBA 更新嵌入的链接 我尝试过下面的代码但失败了 code 1 AppPPT Presentations Open
  • jQuery/javascript 替换标签类型

    有没有一种简单的方法可以循环遍历所有 td 标签并将它们更改为 th ETC 我当前的方法是用 th 包裹它们 然后删除 td 但随后我会丢失其他属性等 jQuery replaceTagName 以下是一个 jQuery 插件 用于替换
  • Woocommerce 自定义产品列表分页

    我有这样的代码用于在 woocommerce 中获取和显示产品 args array post type gt product posts per page gt 30 loop new WP Query args if loop gt h
  • 421 4.3.0 临时系统问题。稍后重试 (10) [重复]

    这个问题在这里已经有答案了 我正在使用nodemailer npm 包和gmail 作为nodejs 中的服务 对于某些电子邮件 我收到以下错误 Data command failed 421 4 3 0 Temporary System
  • 只有一个(自定义)注释从一系列其他注释中轮换

    我的应用程序即将进入最后阶段 该阶段显示公交车的实时地图 所以 基本上 我有一个计时器 它定期从提供公交车实时位置的 xml 表中获取公交车的纬度和经度 我能够设置 xml 解析器 为公交车的移动设置动画并为公交车设置自定义 箭头 图像 然
  • Linq 中的 ISNULL 等效项

    我有一张带有一列的桌子IsActive现在我想获取具有给定状态的记录列表 但我想处理IsActive将 null 值视为 false 在 SQL 中我们使用 SELECT FROM dbo Table c WHERE ISNULL IsAc
  • 为什么 pip 需求文件包含“@​​file”而不是版本号?

    我使用 pip freeze gt requirements txt 创建了requirements txt 有些模块显示 file 而不是版本 它是什么意思以及为什么会显示 康达 4 8 3 这是requirements txt 的结果
  • 为什么对 C 枚举定义中的值使用按位移位运算符?

    Apple 有时会在其应用程序中使用按位移位运算符enum定义 例如 在CGDirectDisplay h文件是核心图形的一部分 enum kCGDisplayBeginConfigurationFlag 1 lt lt 0 kCGDisp
  • -[NSResponder swipeWithEvent:] 未调用

    我正在编写一个针对 OS X Lion 和 Snow Leopard 的应用程序 我有一个观点 我想响应滑动事件 我的理解是三指滑动会调用 NSResponder swipeWithEvent 如果该方法在我的自定义视图中实现 我已经看过了
  • 如何让 Doctrine 正确处理 ENUM?

    在一个应用程序中我有一个案例类表继承 https www doctrine project org projects doctrine orm en 2 6 reference inheritance mapping html class
  • 如何在 Unix 中从键盘设备捕获用户输入?

    我想从键盘设备捕获所有用户输入 一次读取一个字节 我编写了以下代码 但它不起作用 if fd open dev char O RDONLY 1 tty open dev tty O RDONLY tcsetattr 0 TCSANOW or