QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1346|回复: 7

关于getch的问题.

[复制链接]
发表于 2006-5-11 22:47:38 | 显示全部楼层 |阅读模式
我想实现像shell通过上下箭头控制程序的功能.通过找书我发现了getch函数.我觉得这个函数挺实用但是尝试使用时却遇到了很大的困难.我按照linux的帮助文件在程序中包含了curses.h头文件在编译的时候也连了curses的静态库(-lcurses).但是运行时总是段错误.不知哪里还有错.请熟悉这个函数的使用方法的高手们帮忙.
发表于 2006-5-13 00:26:47 | 显示全部楼层
试试用getchar()
回复

使用道具 举报

 楼主| 发表于 2006-5-13 20:18:31 | 显示全部楼层
可是这个还得跟个回车才行啊,shell的上下翻页查看命令历史不是立即生效的吗.
回复

使用道具 举报

发表于 2006-5-14 11:35:14 | 显示全部楼层
不行。在《beginning linux programming》3rd中p201有一个例子。
回复

使用道具 举报

发表于 2006-5-14 11:36:03 | 显示全部楼层
Linux中没有你说的这种立即生效的函数。Win中有。
回复

使用道具 举报

 楼主| 发表于 2006-5-14 19:54:07 | 显示全部楼层
虽然没有对应的函数但是还是非常感谢.还想问一下,如果不要求立即生效,有没有能够接收控制键的函数?比如上下左右.
回复

使用道具 举报

发表于 2006-5-14 21:13:11 | 显示全部楼层
用curses库是要初始化的
回复

使用道具 举报

 楼主| 发表于 2006-5-25 20:35:54 | 显示全部楼层
感谢楼上兄弟的提示,我们操作系统课设结束了,我们老师提供一个有用的函数来和大家共享.以后大家就再也用不着curse库里那个难使用的getch函数了.注意!用之前要#include<termios.h>[code:1]int getch() /*a simulation of the function getch in the windows programming*/
{
        struct termios oldt,newt;
        int ch;
        tcgetattr( STDIN_FILENO, &oldt );
        newt = oldt;
        newt.c_lflag &= ~( ICANON | ECHO | ECHOCTL | IEXTEN | ISIG);
        tcsetattr( STDIN_FILENO, TCSANOW, &newt );
        ch = getchar();
        tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
        return ch;
}[/code:1]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 14:20 , Processed in 0.060296 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表