方式一:利用select监控键盘文件/dev/tty

读取键盘文件“/dev/tty”的数据,其执行流程如下:
首先,打开键盘文件 fd = open("/dev/tty", O_RDONLY | O_NONB);
其次,利用select监控键盘文件的读状态 ret = select(fd, &fdsetR, NULL, NULL, timeout);
然后,利用read读取内容 read(fd, &buff, len);

测试代码如下:

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <assert.h>int main()
{int keyboard;int ret;ssize_t i;char buff[32];fd_set readfd;struct timeval timeout;keyboard = open("/dev/tty", O_RDONLY | O_NONBLOCK);assert(keyboard > 0);while(1){timeout.tv_sec = 5;timeout.tv_usec = 0;FD_ZERO(&readfd);FD_SET(keyboard, &readfd);ret = select(keyboard + 1, &readfd, NULL, NULL, &timeout);if (ret == -1)perror("select error");else if (ret){if (FD_ISSET(keyboard, &readfd)){i = read(keyboard, buff, 31);buff[i]='\0';printf("the input is %s\n", buff);if (strncmp("exit", buff, 4) == 0)break;}}else if (ret == 0){printf("time out\n");}}return 0;
}

方式二:利用预定义的文件描述符STDIN_FILENO

STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。
定义文件\include\unistd.h中,明确说明了是文件描述符
/* Standard file descriptors.  */
#define    STDIN_FILENO    0    /* Standard input.  */
#define    STDOUT_FILENO    1    /* Standard output.  */
#define    STDERR_FILENO    2    /* Standard error output.  */
对其用法,在博客《Linux中的STDIN_FILENO和STDOUT_FILENO》存在实例代码

方式三:利用stdin

stdin等是FILE *类型,属于标准I/O

对于还存在的其他方式,希望大家指出,补充。

linux 接收接盘输入的方式相关推荐

  1. C#接收接盘输入之输入绑定和键盘钩子

    项目中遇到用键盘输入来执行流程的需求,然后去搜索,大致搜到下面几种方式:1.事件:2.输入绑定3.键盘钩子 其中事件和输入绑定,只能在窗口激活或控件不失焦的情况才能使用. 键盘钩子属于系统全局的方式, ...

  2. Linux中read接收用户输入

    #!/bin/bash #提示Please input your name并等待20秒,把输入内容存入变量name中 read -t 20 -p "Please input your nam ...

  3. linux模拟手柄输入,linux下如何模拟按键输入和模拟鼠标

    查看/dev/input/eventX是什么类型的事件, cat /proc/bus/input/devices 设备有着自己特殊的按键键码,我需要将一些标准的按键,比如0-9,X-Z等模拟成标准按键 ...

  4. ​Xamarin iOS教程之使用按钮接接收用户输入

    ​Xamarin iOS教程之使用按钮接接收用户输入 Xamarin iOS使用按钮接接收用户输入 按钮是用户交互的最基础控件.即使是在iPhone或者iPad中,用户使用最多操作也是通过触摸实现点击 ...

  5. linux最常用的目录表示,Linux磁盘分区的命名方式和常用目录?【每日一个知识点第84期-Linux】...

    磁盘分区对于入门的linux来说,是非常入门的技能,也是日常管理中常用技能之一,今天我们来做一个回顾,帮助大家提升磁盘分区的技能. [84期主题]Linux磁盘分区的命名方式和常用目录? Linux分 ...

  6. linux远程登录三种方式telnet,ssh,vnc

    linux远程连接三种方式telnet,ssh,vnc telnet和ssh服务只能实现基于字符界面的远程控制,如果要基于图形界面进行远程控制,可以借助免费的VNC来完成. 一.telnet连接 1. ...

  7. linux安装oracle tar,在linux as4上用tar方式安装oracle 10g步骤教程-Oracle

    今天在linux as4上用tar方式安装oracle 10g,下面简单那记录步骤及安装过程中出现的问题. 原数据库所在服务器信息: [oracle@haoc2008 data]$ more /etc ...

  8. Android EditText接收扫码枪输入,有时缺位,有时出现两次回车

    最近做Android项目时,需要使用外接扫码枪扫描条码,并且接收条码输入的EditText同时还要能接收商品名称的输入,在开发调试的过程中发现,使用扫码枪时会出现条码信息丢失,或者扫码输入过程中出现两 ...

  9. 前端工具-Yeoman模板 + 接收用户输入

    开门见山 在前端工具-自定义generator文章中,介绍了如何自定义generator模块,以及生成对应的文件,如果是一个接一个写文件的话比较费力,好在我们有模板语法通过模板语法,大大提高了效率 模 ...

最新文章

  1. YY的GCD 莫比乌斯反演
  2. TensorFlow学习笔记(一):数据操作指南
  3. Spring Boot异常
  4. JZOJ 5068. 【GDSOI2017第二轮模拟】树
  5. java document select_javasript 操作option select
  6. 想快速体验谷歌 Fuchsia OS?FImage 项目来了!
  7. 二、八大基本类型,由来和详解(超全)/读完这个面试再也不怕问到蒙
  8. 学校技能节计算机专业方案,第十九届技能节展示方案
  9. HFSS学习笔记—18.SMA模拟端口
  10. java抽签_java  抽签程序  【滚动抽签】
  11. ies4linux 本地安装,Linux下离线安装ies4linux
  12. The JSP specification requires that an attribute name is preceded by whitespace 解决
  13. 高职单招面试自我介绍稿子计算机专业,单招面试自我介绍稿子范文
  14. coso全称是什么_京东方全称是什么
  15. DBCO-PEG-SAS DBCO--聚乙二醇-琥珀酰亚胺琥珀酰亚胺酯
  16. 机房迁移测试时需要注意事项
  17. 图书馆炭火盆旁边的数学遐想
  18. Python 爬微信男女人数和各地区人数
  19. 国内10大github开源产品(前端)
  20. 使用WebGL去实现一个拖拽式UI代码生成App

热门文章

  1. 分享一道蚂蚁金服笔试题
  2. VR全景的拍摄制作上传
  3. 多线程并发数量设置设多少算合理
  4. opencv 将两张图片显示到一幅图片中
  5. iOS 增量代码覆盖率检测实践
  6. Python学习记录——1.print()函数与变量
  7. 【玩转嵌入式屏幕显示】(四)TFT-LCD屏幕显示英文字符(ASCII)和字符串
  8. Canvas 3D球形文字云动画特效
  9. Windows10 应用商店打不开问题,报错:Code: 0x80072F7D
  10. 小强怎样练成——读《现代软件工程——构建之法》第三章有感