那天写个程序,突然用到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
感谢这位大牛。
分享到:
相关推荐
### Linux 下 getch 的模拟实现 在 Linux 环境中,并没有直接提供类似于 Windows 下的 `getch()` 函数,因此需要我们手动实现一个类似功能的函数。本文将详细介绍如何在 Linux 下模拟实现 `getch()` 函数,帮助读者...
本项目"Linux 文件IO编程-模拟登陆系统"旨在通过实践,让开发者深入理解如何利用C语言进行文件操作,并结合Linux图形库curses实现一个简单的用户交互界面。下面将详细介绍这个项目涉及的关键知识点。 1. 文件IO编程...
不用enter就可以输入字符,模拟游戏中的操作,代替了windows中的getch()函数
Linux中的`getch()`或`ncurses`库可以用来捕获用户键盘输入,然后将这些输入转换为红外信号。 在进行IR测试时,可能需要了解红外通信的一些基本协议,比如SIR(Serial Infrared)、FIR(Fast Infrared)或IrDA的...
在Linux环境下实现的2048游戏是一个基于命令行界面的经典数字合并游戏。这个游戏的核心是通过C语言编写的,文件名为`my2048.c`。以下是对代码中的主要知识点的详细解释: 1. **颜色宏定义**: 代码中定义了一系列...
根据提供的文件信息,我们可以推断出这是一本关于 Linux 下 NCurses 库使用的专业书籍《程序员的 NCurses 指南》(Programmer’s Guide to NCurses)的版权页及部分目录信息。以下是对该书可能涉及的重要知识点的...
这个系统模拟了Linux中的一些基本操作,如创建、删除、重命名文件和目录,以及切换目录等。下面我们将深入探讨其中的关键知识点。 首先,系统通过`FBSystem`类来封装所有操作。在`main.cpp`中,`FBSystem`对象`g_...
Surses库最初是为了模拟Curses库,一个在UNIX系统上广泛使用的库,但在Linux环境中,Surses已经发展成为了一个独立且功能强大的库。本教程将深入探讨如何使用Surses库来实现一个简单的“Hello World”程序。 首先,...
`getch()`函数用于获取单个键盘输入,`keypad(window, TRUE)`启用特殊键(如方向键)的识别。 【多视窗处理】curses库允许创建多个窗口(`newwin()`),每个窗口有自己的坐标系统。通过`mvwin()`可以移动窗口,`...
在Linux环境下实现2048游戏,是一种将编程与经典数字拼合游戏相结合的实践。本文将探讨如何在Linux系统中编写2048游戏的示例代码,并介绍相关的关键技术点。 首先,2048游戏的核心在于矩阵操作和数字合并规则。在这...
然而,需要注意的是,`_getch()`和`_kbhit()`并不适用于所有环境,比如在一些Unix或者Linux系统上,这些函数并不可用。在这种情况下,可以使用`ncurses`库或者其他低级别的操作系统API来实现类似的功能。 在Windows...
在Python编程语言中,模拟界面菜单功能是一项常见的需求,特别是在创建命令行接口或者简单的桌面应用程序时。本案例涉及的知识点主要集中在如何利用Python实现这样的功能,并且特别关注了如何通过键盘的方向键进行...
这个开源版本的Conio.h提供了一些类似原版的功能,如`cprintf`(格式化打印到屏幕)、`getch`(非阻塞读取单个字符)和`gotoxy`(设置光标位置)等,从而使得在Linux上编写控制台程序的代码更加接近DOS或Windows下的...
在提供的压缩包`gnuconio`中,很可能是包含了一个针对GNU环境的`conio`实现,这可能是为了在Linux或其他类Unix系统中模拟DOS下的`conio.h`功能。这个库可能包含了一些源代码、头文件和编译好的库文件,供开发者在非...
3. **物理模拟**:Flappy Bird中的鸟飞行有重力影响,需要使用简单的物理模型来模拟鸟的上升和下降。 4. **游戏循环**:游戏主循环持续检查用户输入,更新游戏状态,重绘屏幕,然后进入下一轮循环。 5. **用户界面...
### Linux编程环境下的课程设计知识点总结 #### 一、课程设计背景与目标 在计算机科学领域,操作系统(Operating System, OS)是管理计算机硬件与软件资源的核心系统软件。本课程设计旨在通过实践项目帮助学生更好...
对于eclipse for C++,虽然它主要面向Linux环境,通常不直接支持conio,但通过一些额外配置,比如添加MinGW编译器或者模拟DOS环境,也能实现对conio函数的支持。 在现代软件开发中,尽管conio.h的使用越来越少,但...
标题中的“c语言制作的烟花代码源码”指的是使用C语言编写的一段程序,...不过需要注意的是,由于使用了`<conio.h>`和`<windows.h>`,这段代码只能在Windows环境下运行,不能在其他操作系统如Linux或macOS上编译执行。
2. **字符界面编程**:利用C语言的stdio库,通过`printf`和`scanf`函数进行字符输出和用户输入,以及使用`getch`或`kbhit`等函数实现非阻塞式用户输入检测。 3. **游戏逻辑**:实现方块生成、旋转、下落、消除行以及...