getche()関数でCでプログラムをコンパイルする方法を知る必要がありますが、参照が必要なのでコンパイルしません。何人かのリファレンスが何か分からないことを知っていますこのCOMANDを使用して私はターミナルでgcc上のlinuxでgetche()を使用しようとしています。
イム:
gccのFILENAME.C -o execの
getche()関数でCでプログラムをコンパイルする方法を知る必要がありますが、参照が必要なのでコンパイルしません。何人かのリファレンスが何か分からないことを知っていますこのCOMANDを使用して私はターミナルでgcc上のlinuxでgetche()を使用しようとしています。
イム:
gccのFILENAME.C -o execの
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;
}
から、あなたはおそらくncursesを使用してだけではなくしようとすることにしたいですgetch [e]をエミュレートする。これは少し複雑なAPIですが、Dan Dさんが投稿した簡単なエミュレーションではない、あなたのためのあらゆる種類の問題を処理します。 (たとえば、ユーザーが^Cまたは^Zと入力した場合は、正しいことを行います)
「参照が必要です」とはどういう意味ですか?正確なエラーメッセージを貼り付けることはできますか? (また、 'exec'はシェルが組み込まれているので、名前の貧しい選択のように思えます。) – andrewdski
@andrewdski:私はDuracellがリンカエラーメッセージ" getche''への未定義の参照を見たと思います。それが何を意味するか知っている。 @Duracell: "undefined reference"はGNUリンカの間違いなく明白なことですが、あなたがリストしたファイルやライブラリのいずれも、デフォルトで含まれているシステムライブラリも関数(またはグローバル変数)も定義していません。あなたのプログラムは*を指しています。この場合は、 'getch [e] 'はUnixで利用できなかったDOSismsです - あなたが理想的に*使うべきであるものに対する私の答えを見てください。 – zwol