2011-06-25 3 views
0

getche()関数でCでプログラムをコンパイルする方法を知る必要がありますが、参照が必要なのでコンパイルしません。何人かのリファレンスが何か分からないことを知っていますこのCOMANDを使用して私はターミナルでgcc上のlinuxでgetche()を使用しようとしています。

イム:

gccのFILENAME.C -o execの

+1

「参照が必要です」とはどういう意味ですか?正確なエラーメッセージを貼り付けることはできますか? (また、 'exec'はシェルが組み込まれているので、名前の貧しい選択のように思えます。) – andrewdski

+0

@andrewdski:私はDuracellがリンカエラーメッセージ" getche''への未定義の参照を見たと思います。それが何を意味するか知っている。 @Duracell: "undefined reference"はGNUリンカの間違いなく明白なことですが、あなたがリストしたファイルやライブラリのいずれも、デフォルトで含まれているシステムライブラリも関数(またはグローバル変数)も定義していません。あなたのプログラムは*を指しています。この場合は、 'getch [e] 'はUnixで利用できなかったDOSismsです - あなたが理想的に*使うべきであるものに対する私の答えを見てください。 – zwol

答えて

2

Linuxや他のUNIXプラットフォームの場合​​

/* 
    getch() and getche() functionality for UNIX, 
    based on termios (terminal handling functions) 

    This code snippet was written by Wesley Stessens ([email protected]) 
    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; 
} 
3

から、あなたはおそらくncursesを使用してだけではなくしようとすることにしたいですgetch [e]をエミュレートする。これは少し複雑なAPIですが、Dan Dさんが投稿した簡単なエミュレーションではない、あなたのためのあらゆる種類の問題を処理します。 (たとえば、ユーザーが^Cまたは^Zと入力した場合は、正しいことを行います)

関連する問題