`
pipal
  • 浏览: 166140 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

Linux下模拟getch()

阅读更多

那天写个程序,突然用到TC下的getch()函数,用以即时捕获键盘的输入,但Linux下是没有这个函数的,没办法,只能模拟这个函数。这个函数必须设置终端的属性,关于Linx下的编程,我已经忘记得差不多了,感慨啊。只能从网上求助大牛了,以下程序是一大牛写的,实现了该功能。

 

#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <assert.h>
#include <string.h>

int getch(void);

int main(void)
{
        char ch;
        printf("Input a char:");
        fflush(stdin);
        ch = getch();
        printf("\nYou input character is: %c\n", ch);
        return 0;
}

int getch(void)
{
        int c=0;
        struct termios org_opts, new_opts;
        int res=0;
        //-----  store old settings -----------
        res=tcgetattr(STDIN_FILENO, &org_opts);
        assert(res==0);
        //---- set new terminal parms --------
        memcpy(&new_opts, &org_opts, sizeof(new_opts));
        new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL);
        tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);
        c=getchar();
            //------  restore old settings ---------
        res=tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);assert(res==0);
        return c;
}

 

 

代码出自:http://topic.csdn.net/u/20080417/16/6f0b781c-287a-485c-b370-7c62953c2193.html

感谢这位大牛。

0
0
分享到:
评论

相关推荐

    Linux下getch的模拟实现

    ### Linux 下 getch 的模拟实现 在 Linux 环境中,并没有直接提供类似于 Windows 下的 `getch()` 函数,因此需要我们手动实现一个类似功能的函数。本文将详细介绍如何在 Linux 下模拟实现 `getch()` 函数,帮助读者...

    Linux 文件IO编程-模拟登陆系统

    本项目"Linux 文件IO编程-模拟登陆系统"旨在通过实践,让开发者深入理解如何利用C语言进行文件操作,并结合Linux图形库curses实现一个简单的用户交互界面。下面将详细介绍这个项目涉及的关键知识点。 1. 文件IO编程...

    linux下的推箱子简易版

    不用enter就可以输入字符,模拟游戏中的操作,代替了windows中的getch()函数

    红外IR测试,测试IR功能是否OK。

    Linux中的`getch()`或`ncurses`库可以用来捕获用户键盘输入,然后将这些输入转换为红外信号。 在进行IR测试时,可能需要了解红外通信的一些基本协议,比如SIR(Serial Infrared)、FIR(Fast Infrared)或IrDA的...

    linux下实现的2048游戏示例.docx

    在Linux环境下实现的2048游戏是一个基于命令行界面的经典数字合并游戏。这个游戏的核心是通过C语言编写的,文件名为`my2048.c`。以下是对代码中的主要知识点的详细解释: 1. **颜色宏定义**: 代码中定义了一系列...

    Linux Curses库使用说明

    根据提供的文件信息,我们可以推断出这是一本关于 Linux 下 NCurses 库使用的专业书籍《程序员的 NCurses 指南》(Programmer’s Guide to NCurses)的版权页及部分目录信息。以下是对该书可能涉及的重要知识点的...

    c++操作系统仿linux二级文件管理系统实用.pdf

    这个系统模拟了Linux中的一些基本操作,如创建、删除、重命名文件和目录,以及切换目录等。下面我们将深入探讨其中的关键知识点。 首先,系统通过`FBSystem`类来封装所有操作。在`main.cpp`中,`FBSystem`对象`g_...

    基于linux系统下surses库的简单应用(hello work)

    Surses库最初是为了模拟Curses库,一个在UNIX系统上广泛使用的库,但在Linux环境中,Surses已经发展成为了一个独立且功能强大的库。本教程将深入探讨如何使用Surses库来实现一个简单的“Hello World”程序。 首先,...

    linux下使用curses库实现滚屏、彩色打印等个性化屏幕输出

    `getch()`函数用于获取单个键盘输入,`keypad(window, TRUE)`启用特殊键(如方向键)的识别。 【多视窗处理】curses库允许创建多个窗口(`newwin()`),每个窗口有自己的坐标系统。通过`mvwin()`可以移动窗口,`...

    linux下实现的2048游戏示例分享

    在Linux环境下实现2048游戏,是一种将编程与经典数字拼合游戏相结合的实践。本文将探讨如何在Linux系统中编写2048游戏的示例代码,并介绍相关的关键技术点。 首先,2048游戏的核心在于矩阵操作和数字合并规则。在这...

    控制台按键监控(c++实现)

    然而,需要注意的是,`_getch()`和`_kbhit()`并不适用于所有环境,比如在一些Unix或者Linux系统上,这些函数并不可用。在这种情况下,可以使用`ncurses`库或者其他低级别的操作系统API来实现类似的功能。 在Windows...

    Python代码源码-实操案例-框架案例-模拟界面菜单功能中的方向键.zip

    在Python编程语言中,模拟界面菜单功能是一项常见的需求,特别是在创建命令行接口或者简单的桌面应用程序时。本案例涉及的知识点主要集中在如何利用Python实现这样的功能,并且特别关注了如何通过键盘的方向键进行...

    Conio for Linux-开源

    这个开源版本的Conio.h提供了一些类似原版的功能,如`cprintf`(格式化打印到屏幕)、`getch`(非阻塞读取单个字符)和`gotoxy`(设置光标位置)等,从而使得在Linux上编写控制台程序的代码更加接近DOS或Windows下的...

    conio.h conio.a 库文件

    在提供的压缩包`gnuconio`中,很可能是包含了一个针对GNU环境的`conio`实现,这可能是为了在Linux或其他类Unix系统中模拟DOS下的`conio.h`功能。这个库可能包含了一些源代码、头文件和编译好的库文件,供开发者在非...

    Flappy bird小游戏

    3. **物理模拟**:Flappy Bird中的鸟飞行有重力影响,需要使用简单的物理模型来模拟鸟的上升和下降。 4. **游戏循环**:游戏主循环持续检查用户输入,更新游戏状态,重绘屏幕,然后进入下一轮循环。 5. **用户界面...

    课 程 设 计 报 告

    ### Linux编程环境下的课程设计知识点总结 #### 一、课程设计背景与目标 在计算机科学领域,操作系统(Operating System, OS)是管理计算机硬件与软件资源的核心系统软件。本课程设计旨在通过实践项目帮助学生更好...

    conio头文件及其开源代码(codeblocks,VS,VC可用)

    对于eclipse for C++,虽然它主要面向Linux环境,通常不直接支持conio,但通过一些额外配置,比如添加MinGW编译器或者模拟DOS环境,也能实现对conio函数的支持。 在现代软件开发中,尽管conio.h的使用越来越少,但...

    c语言制作的烟花代码源码

    标题中的“c语言制作的烟花代码源码”指的是使用C语言编写的一段程序,...不过需要注意的是,由于使用了`&lt;conio.h&gt;`和`&lt;windows.h&gt;`,这段代码只能在Windows环境下运行,不能在其他操作系统如Linux或macOS上编译执行。

    俄罗斯方块 用C语言写的

    2. **字符界面编程**:利用C语言的stdio库,通过`printf`和`scanf`函数进行字符输出和用户输入,以及使用`getch`或`kbhit`等函数实现非阻塞式用户输入检测。 3. **游戏逻辑**:实现方块生成、旋转、下落、消除行以及...

Global site tag (gtag.js) - Google Analytics