Unix下如何直接获取键盘输入而不需要以回车作为结束符的方法总结
2008-12-17 16:23
429 查看
#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/fcntl.h>
#include <curses.h>
//sttyコマンドは標準出力で使用される端末の設定と確認を行うことができます。
//コマンドリファレンスはこちらを参考に。
//http://www.linux.or.jp/JM/html/GNU_sh-utils/man1/stty.1.html
int keyInput1()
{
char ab_Chr[250];
int gi_Tty;
/* 端末を入力モードでオープン */
if((gi_Tty = open("/dev/tty",O_RDONLY)) == -1)/* 異常時 */{
/* 異常で復帰 */
return -1;
}
system("stty raw -echo");
read(gi_Tty, ab_Chr, 1);
close(gi_Tty);
system("stty -raw echo");
printf("%c/n",ab_Chr[0]);
return ab_Chr[0];
}
int keyInput2()
{
char ab_Chr[250];
char c;
/*
*ioctl() would be better here; only lazy
*programmers do it this way:
*/
system("/bin/stty raw");
c=getchar();
system("/bin/stty -raw");
return c;
}
//terminalの属性を修正する
int keyInput3()
{
int c;
struct termios new_settings;
struct termios stored_settings;
tcgetattr(0,&stored_settings);
new_settings = stored_settings;
new_settings.c_lflag &= (~ICANON);
new_settings.c_cc[VTIME] = 0;
new_settings.c_cc[VMIN] = 1;
tcsetattr(0,TCSANOW,&new_settings);
c = getchar();
tcsetattr(0,TCSANOW,&stored_settings);
return c;
}
//curscrライブラリで実現する
int keyInput4()
{
WINDOW *curscr, *stdscr;
unsigned char c,b,a,buf[32];
stdscr = initscr();
//clear();
c=getch();
printw("/n");
//printw("c= %c/n",c);
refresh();
endwin();
return c;
}
int main()
{
char t_ReadBuf[250];
while(1)
{
int c ;
printf("Call keyInput1/n");
c=keyInput1();
printf("Input c=%c/n",c);
printf("/n");
printf("Call keyInput2/n");
c=keyInput2();
printf("/nInput c=%c/n",c);
printf("/n");
printf("Call keyInput3/n");
c=keyInput3();
printf("/nInput c=%c/n",c);
printf("Call keyInput4/n");
c=keyInput4();
printf("/nInput c=%c/n",c);
if (c == 'q')
{
return 0;
}
}
}
//cc KeyInput.c -l curses
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/fcntl.h>
#include <curses.h>
//sttyコマンドは標準出力で使用される端末の設定と確認を行うことができます。
//コマンドリファレンスはこちらを参考に。
//http://www.linux.or.jp/JM/html/GNU_sh-utils/man1/stty.1.html
int keyInput1()
{
char ab_Chr[250];
int gi_Tty;
/* 端末を入力モードでオープン */
if((gi_Tty = open("/dev/tty",O_RDONLY)) == -1)/* 異常時 */{
/* 異常で復帰 */
return -1;
}
system("stty raw -echo");
read(gi_Tty, ab_Chr, 1);
close(gi_Tty);
system("stty -raw echo");
printf("%c/n",ab_Chr[0]);
return ab_Chr[0];
}
int keyInput2()
{
char ab_Chr[250];
char c;
/*
*ioctl() would be better here; only lazy
*programmers do it this way:
*/
system("/bin/stty raw");
c=getchar();
system("/bin/stty -raw");
return c;
}
//terminalの属性を修正する
int keyInput3()
{
int c;
struct termios new_settings;
struct termios stored_settings;
tcgetattr(0,&stored_settings);
new_settings = stored_settings;
new_settings.c_lflag &= (~ICANON);
new_settings.c_cc[VTIME] = 0;
new_settings.c_cc[VMIN] = 1;
tcsetattr(0,TCSANOW,&new_settings);
c = getchar();
tcsetattr(0,TCSANOW,&stored_settings);
return c;
}
//curscrライブラリで実現する
int keyInput4()
{
WINDOW *curscr, *stdscr;
unsigned char c,b,a,buf[32];
stdscr = initscr();
//clear();
c=getch();
printw("/n");
//printw("c= %c/n",c);
refresh();
endwin();
return c;
}
int main()
{
char t_ReadBuf[250];
while(1)
{
int c ;
printf("Call keyInput1/n");
c=keyInput1();
printf("Input c=%c/n",c);
printf("/n");
printf("Call keyInput2/n");
c=keyInput2();
printf("/nInput c=%c/n",c);
printf("/n");
printf("Call keyInput3/n");
c=keyInput3();
printf("/nInput c=%c/n",c);
printf("Call keyInput4/n");
c=keyInput4();
printf("/nInput c=%c/n",c);
if (c == 'q')
{
return 0;
}
}
}
//cc KeyInput.c -l curses
相关文章推荐
- 如何通过JAVA获取键盘输入值几种方法介绍
- 【iOS开发-37】在点击或者输入结束后不需要键盘的时候如何隐藏并退出软键盘?
- linux 不回车直接读取一个字符的方法(termios结构的描述了终端的模式,在这段代码中我们改变了它,使得终端能够接收到键盘输入马上返回。)
- iOS开发在点击或者输入结束后不需要键盘的时候如何隐藏并退出软键盘?
- jquery利用event.which方法如何获取键盘输入值
- jquery利用event.which方法如何获取键盘输入值
- c++ 如何输入一组数字 以回车作为结束
- Java编程:获取键盘输入的三种方法
- Java中获取键盘输入值的三种方法
- Java中获取键盘输入值的三种方法
- 有个输入框textbox和一个button,如何直接回车就响应button_click()方法
- 从键盘获取输入值的方法
- 在C++中使用conio.h 实现实时键盘输入读取 (即不需要回车)
- java如何获取键盘输入
- Java中获取键盘输入值的三种方法
- Java中的Scanner类的用法以及其他获取键盘输入的方法
- 【VC++6.0】getline需要输入2次回车才会结束的BUG修复方法
- Java_获取键盘输入值的三种方法
- 从键盘输入一字符串(以#作为结束),显示在屏幕中并写入ch.txt文件中
- 汇编语言: 从键盘上输入一串字符(用回车键结束,使用10号功能调用。),将其中的小写英文 字母变换为大写英文字母,其他字符保持不变。然后将变换后的字符串显示出来。