Unix下如何直接获取键盘输入而不需要以回车作为结束符的方法总结
来源:互联网 发布:洛奇英雄传au优化 编辑:程序博客网 时间:2024/06/10 03:56
#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
- Unix下如何直接获取键盘输入而不需要以回车作为结束符的方法总结
- 从键盘输入一系列字符(以回车符结束),并按字母、数字及其他字符分类计数,最后显示出这三类的计数结果
- 如何获取键盘的高度,而不需要通过通知?
- 如何获取键盘的高度,而不需要通过通知?
- Linux 以“换行符”作为文本行的结束
- 如何连续读取多个以空格分开的数字?遇见回车结束?
- 从键盘输入文件结束符方法
- C/C++输入过程中检测回车符作为程序输入结束的若干问题
- linux c下如何实现不需要回车读入一字符
- java 获取键盘输入的方法
- Windows下键盘输入时如何标识输入结束
- 由于WINDOWS和UNIX中回车换行符的表示方法不同而引起的.gz文件的损坏Corrupt GZIP trailer
- 不需要为WP如何正确获取文章ID而烦燥
- 从键盘输入文件的结束符
- 从键盘输入一字符串(以#作为结束),显示在屏幕中并写入ch.txt文件中
- Windows系统下查看Android SDK的源码的方法 简单 不需要unix
- 以EOF结束、以0 0结束、以0结束的例题总结
- 关于回车直接执行事件的方法
- 为什么有人惧怕开源?--傻子的钱最好赚
- AfxOleInit 和CoInitlize的区别
- 国际:写出漂亮代码的七种方法----看了美化化码的想法,觉得很好,故加以引用,希望更多人可以看到
- Struct 结构体疑惑(c语言)
- 终验结果的经验
- Unix下如何直接获取键盘输入而不需要以回车作为结束符的方法总结
- 如何用C语言操纵AVR的IO端口(以ICCAVR为例)
- 总结Java中return语句的用法
- asp.net的自代验证forms
- windows CE应用程序异常的调试方法——转载
- hibernate开发中使用原生语句查询
- 使用curses库进行tab 移动代码
- Cannot retrieve mapping for action
- 如何处理libva加速元件的显示:(vaPutImage)(1)