当前位置: 技术问答>linux和unix
问一个字符输入的问题
来源: 互联网 发布时间:2016-04-07
本文导语: windows下有一个函数叫做getch(),无论键盘输入任意一个字符,都立刻返回该字符的ascii值。 而在linux下并没有这样的函数,调用getchar()必须按回车才能返回,vxWorks中也是一样。 那么我就不明白,象一些嵌入式设备如...
windows下有一个函数叫做getch(),无论键盘输入任意一个字符,都立刻返回该字符的ascii值。
而在linux下并没有这样的函数,调用getchar()必须按回车才能返回,vxWorks中也是一样。
那么我就不明白,象一些嵌入式设备如思科路由器的命令行界面,他们是如何处理字符的输入呢?
典型的例子:路由器命令终端上按?立刻返回命令的帮助(不需要按回车)。
而在linux下并没有这样的函数,调用getchar()必须按回车才能返回,vxWorks中也是一样。
那么我就不明白,象一些嵌入式设备如思科路由器的命令行界面,他们是如何处理字符的输入呢?
典型的例子:路由器命令终端上按?立刻返回命令的帮助(不需要按回车)。
|
在linux字符设备驱动中有一个termios的概念,它是专门控制格式的。
你用ioctl设置VTIME和VMIN值,
如下代码:
**************************************************************
struct termios new_settings;
tcgetattr(0,&stored_settings);
new_settings = stored_settings;
/* Disable canonical mode, and set buffer size to 1 byte */
new_settings.c_lflag &= (~ICANON);
new_settings.c_cc[VTIME] = 0;
new_settings.c_cc[VMIN] = 1;
tcsetattr(0,TCSANOW,&new_settings);
**************************************************************
你用ioctl设置VTIME和VMIN值,
如下代码:
**************************************************************
struct termios new_settings;
tcgetattr(0,&stored_settings);
new_settings = stored_settings;
/* Disable canonical mode, and set buffer size to 1 byte */
new_settings.c_lflag &= (~ICANON);
new_settings.c_cc[VTIME] = 0;
new_settings.c_cc[VMIN] = 1;
tcsetattr(0,TCSANOW,&new_settings);
**************************************************************
|
参考UNIX的终端I/O编程
楼上的代码是对的
可以直接写到方法中用的
主要就是termios.h
楼上的代码是对的
可以直接写到方法中用的
主要就是termios.h
|
linux也有getch函数,在curses.h头文件中,是curses库提供的函数.
getchar需要回车后才返回,是标准I/O是行缓冲的.
getchar需要回车后才返回,是标准I/O是行缓冲的.
|
学习了!~
|
mark~ 学习