I';我试图在linux中通过gcc在终端上使用getche()

I';我试图在linux中通过gcc在终端上使用getche(),c,gcc,C,Gcc,我需要知道如何使用getche()函数在C中编译一个程序,但由于它需要引用,所以没有编译。有人知道缺少什么参考吗 我正在使用这个命令: gcc filename.c-o exec来自 /* 用于UNIX的getch()和getche()功能, 基于termios(终端处理功能) 此代码段由Wesley Stessens编写(wesley@ubuntu.com) 它是在公共领域发布的。 */ #包括 #包括 静态结构术语旧的、新的; /*初始化新的终端i/o设置*/ void initTermio

我需要知道如何使用getche()函数在C中编译一个程序,但由于它需要引用,所以没有编译。有人知道缺少什么参考吗

我正在使用这个命令:

gcc filename.c-o exec

来自

/*
用于UNIX的getch()和getche()功能,
基于termios(终端处理功能)
此代码段由Wesley Stessens编写(wesley@ubuntu.com)
它是在公共领域发布的。
*/
#包括
#包括
静态结构术语旧的、新的;
/*初始化新的终端i/o设置*/
void initTermios(int-echo){
tcgetattr(0,&old);/*获取旧的终端i/o设置*/
新建=旧;/*使新设置与旧设置相同*/
new.c_lflag&=~ICANON;/*禁用缓冲i/o*/
new.clflag&=echo?echo:~echo;/*设置回显模式*/
tcsetattr(0、TCSANOW和new);/*立即使用这些新的终端i/o设置*/
}
/*恢复旧的终端i/o设置*/
void resetTermios(void){
tcsetattr(0、TCSANOW和old);
}
/*读取1个字符-回波定义回波模式*/
char getch_u2;(int echo){
char ch;
initTermios(echo);
ch=getchar();
resetTermios();
返回ch;
}
/*读取1个字符,无回声*/
char getch(void){
返回getch(0);
}
/*用echo读取1个字符*/
char getche(无效){
返回getch(1);
}
/*让我们测试一下*/
内部主(空){
字符c;
printf(((getche示例)请键入一个字母:);
c=getche();
printf(“\n您键入的:%c\n”,c);
printf(“(getch示例)请键入一个字母…”);
c=getch();
printf(“\n您键入的:%c\n”,c);
返回0;
}
来自

/*
用于UNIX的getch()和getche()功能,
基于termios(终端处理功能)
此代码段由Wesley Stessens编写(wesley@ubuntu.com)
它是在公共领域发布的。
*/
#包括
#包括
静态结构术语旧的、新的;
/*初始化新的终端i/o设置*/
void initTermios(int-echo){
tcgetattr(0,&old);/*获取旧的终端i/o设置*/
新建=旧;/*使新设置与旧设置相同*/
new.c_lflag&=~ICANON;/*禁用缓冲i/o*/
new.clflag&=echo?echo:~echo;/*设置回显模式*/
tcsetattr(0、TCSANOW和new);/*立即使用这些新的终端i/o设置*/
}
/*恢复旧的终端i/o设置*/
void resetTermios(void){
tcsetattr(0、TCSANOW和old);
}
/*读取1个字符-回波定义回波模式*/
char getch_u2;(int echo){
char ch;
initTermios(echo);
ch=getchar();
resetTermios();
返回ch;
}
/*读取1个字符,无回声*/
char getch(void){
返回getch(0);
}
/*用echo读取1个字符*/
char getche(无效){
返回getch(1);
}
/*让我们测试一下*/
内部主(空){
字符c;
printf(((getche示例)请键入一个字母:);
c=getche();
printf(“\n您键入的:%c\n”,c);
printf(“(getch示例)请键入一个字母…”);
c=getch();
printf(“\n您键入的:%c\n”,c);
返回0;
}

对于Linux和其他Unix平台,您可能希望使用它们,而不仅仅是尝试模拟getch[e]。这是一个稍微复杂一点的API,但它会为您解决各种各样的问题,而Dan D.发布的简单模拟不会解决这些问题。(例如,如果用户键入^C或^Z,它会做正确的事情。)

对于您可能希望使用的Linux和其他Unix平台,而不仅仅是尝试模拟getch[e]。这是一个稍微复杂一点的API,但它会为您解决各种各样的问题,而Dan D.发布的简单模拟不会解决这些问题。(例如,如果用户键入^C或^Z,它会做正确的事情。)

它“需要引用”是什么意思?你能粘贴准确的错误信息吗?(而且,
exec
似乎是一个糟糕的名称选择,因为它是一个内置的shell。)@andrewdski:我怀疑Duracell看到链接器错误消息“
未定义对“getche”的引用
”,不知道这是什么意思@Duracell:“undefined reference”是GNU链接器的一种不太明显的方式,它告诉您,您列出的任何文件和库,以及默认包含的系统库,都没有定义程序引用的函数(或全局变量)。在本例中,这是因为
getch[e]
是Unix上从未使用过的剂量管理-请参阅我的答案,了解您理想的使用方法,或者查看Dan的快速修复方法。您认为“需要参考”是什么意思?你能粘贴准确的错误信息吗?(而且,
exec
似乎是一个糟糕的名称选择,因为它是一个内置的shell。)@andrewdski:我怀疑Duracell看到链接器错误消息“
未定义对“getche”的引用
”,不知道这是什么意思@Duracell:“undefined reference”是GNU链接器的一种不太明显的方式,它告诉您,您列出的任何文件和库,以及默认包含的系统库,都没有定义程序引用的函数(或全局变量)。在本例中,这是因为
getch[e]
是Unix中从未使用过的剂量管理-请参阅我的答案,了解您理想的使用方法,或者参阅Dan的快速修复方法。
/*
    getch() and getche() functionality for UNIX,
    based on termios (terminal handling functions)

    This code snippet was written by Wesley Stessens (wesley@ubuntu.com)
    It is released in the Public Domain.
*/

#include <termios.h>
#include <stdio.h>

static struct termios old, new;

/* Initialize new terminal i/o settings */
void initTermios(int echo) {
    tcgetattr(0, &old); /* grab old terminal i/o settings */
    new = old; /* make new settings same as old settings */
    new.c_lflag &= ~ICANON; /* disable buffered i/o */
    new.c_lflag &= echo ? ECHO : ~ECHO; /* set echo mode */
    tcsetattr(0, TCSANOW, &new); /* use these new terminal i/o settings now */
}

/* Restore old terminal i/o settings */
void resetTermios(void) {
    tcsetattr(0, TCSANOW, &old);
}

/* Read 1 character - echo defines echo mode */
char getch_(int echo) {
    char ch;
    initTermios(echo);
    ch = getchar();
    resetTermios();
    return ch;
}

/* Read 1 character without echo */
char getch(void) {
    return getch_(0);
}

/* Read 1 character with echo */
char getche(void) {
    return getch_(1);
}

/* Let's test it out */
int main(void) {
    char c;
    printf("(getche example) please type a letter: ");
    c = getche();
    printf("\nYou typed: %c\n", c);
    printf("(getch example) please type a letter...");
    c = getch();
    printf("\nYou typed: %c\n", c);
    return 0;
}