我有一个getch()
我的导师给我的功能,它可以在不点击“ENTER”的情况下从键盘获取输入。但是,当我在 Eclipse 的 Ubuntu 12 中运行它时,出现以下错误:
tcsetattr(): Inappropriate ioctl for device
tcsetattr ICANON: Inappropriate ioctl for device
这是我的代码:
#include <stdio.h>
#include <unistd.h>
#include <termios.h>
char getch();
int main(int argc, const char* argv[])
{
char c;
do
{
c=getch();
printf("%c",c);
} while(c!='q');
return 0;
}
char getch()
{
char buf = 0;
struct termios old = {0};
if (tcgetattr(0, &old) < 0)
perror("tcsetattr()");
old.c_lflag &= ~ICANON;
old.c_lflag &= ~ECHO;
old.c_cc[VMIN] = 1;
old.c_cc[VTIME] = 0;
if (tcsetattr(0, TCSANOW, &old) < 0)
perror("tcsetattr ICANON");
if (read(0, &buf, 1) < 0)
perror ("read()");
old.c_lflag |= ICANON;
old.c_lflag |= ECHO;
if (tcsetattr(0, TCSADRAIN, &old) < 0)
perror ("tcsetattr ~ICANON");
return (buf);
}
注意:该代码在 SSH 安全外壳中工作。但是我必须在我的 Ubuntu 中完成这项工作,因为我在那里编写了我的代码。谢谢