Проблема в си

Все о программировании под *nix
Аватара пользователя
constab
Неотъемлемая часть форума
Сообщения: 241
Зарегистрирован: 17 авг 2004, 11:36
Откуда: Минск
Контактная информация:

Проблема в си

Сообщение constab »

У меня есть некая программа, в которой при нажатии определенных клавиш на клавиатуре, должны выполняться определенные действия (разные). Как узнать код нажатой клавиши?? Пытался работать с getch, но ничего не выходит :(
Хачу крыху паразумнець!

RST#13
Заглянувший
Сообщения: 13
Зарегистрирован: 18 дек 2005, 03:31

Сообщение RST#13 »

1. Выполнить настройку режимов консоли с помощью ioctl
2. Открыть файловое устройство консоли на чтение
3. Считывать в цикле поступающие по мере ввода int из полученного дескриптора и декодировать.

Пример - console-tools sources, файл showkey.c
Дополнительно: man ioctl, man tcgetattr, man terminfo,
http://www.tldp.org/HOWTO/Keyboard-and- ... HOWTO.html

Если это не поможет - значит, системным программированием Вам заниматься нежелательно.


Rgds,
RST#13
Hack'em, and their law (c)

Аватара пользователя
constab
Неотъемлемая часть форума
Сообщения: 241
Зарегистрирован: 17 авг 2004, 11:36
Откуда: Минск
Контактная информация:

Сообщение constab »

Неужели в linux-е так на си так сложно узнать какую кнопку(клавишу) нажал пользователь???

Даже в pascal-е это было достаточно просто, не говорю о delphi...

Суть программы заключается в том, что при нажатии клавиши ESC программа завершает работу, а при нажатии других клавиш выполняются другие функции...

Плиз помогите... Киньте исходник, вам профессионалам в си это не сложно..:(
Хачу крыху паразумнець!

michael
Неотъемлемая часть форума
Сообщения: 434
Зарегистрирован: 12 апр 2004, 11:00
Откуда: г. Владивосток
Контактная информация:

Сообщение michael »

Код: Выделить всё

#include <curses.h>
int main()
{
 initscr();
 cbreak(); 
 while(getch() != 27);
 endwin();
 return 0;
}
Оно?

Аватара пользователя
Silos
Неотъемлемая часть форума
Сообщения: 287
Зарегистрирован: 15 фев 2004, 19:04
Откуда: Belarus, Minsk
Контактная информация:

Сообщение Silos »

constab писал(а):Неужели в linux-е так на си так сложно узнать какую кнопку(клавишу) нажал пользователь???

Даже в pascal-е это было достаточно просто, не говорю о delphi...

Суть программы заключается в том, что при нажатии клавиши ESC программа завершает работу, а при нажатии других клавиш выполняются другие функции...

Плиз помогите... Киньте исходник, вам профессионалам в си это не сложно..:(
RST#13 помоему уже сказал правильный и быстрый способ.

michael
Неотъемлемая часть форума
Сообщения: 434
Зарегистрирован: 12 апр 2004, 11:00
Откуда: г. Владивосток
Контактная информация:

Сообщение michael »

Вы что, издеваетесь? Человеку нужно просто узнать какая клавиша нажата, а вы его системным программированием посылаете заниматься.

Аватара пользователя
Silos
Неотъемлемая часть форума
Сообщения: 287
Зарегистрирован: 15 фев 2004, 19:04
Откуда: Belarus, Minsk
Контактная информация:

Сообщение Silos »

:lol:

Аватара пользователя
constab
Неотъемлемая часть форума
Сообщения: 241
Зарегистрирован: 17 авг 2004, 11:36
Откуда: Минск
Контактная информация:

Сообщение constab »

У меня не компилируется...

Код: Выделить всё

#include <curses.h>
int main()
{
 initscr();
 cbreak(); 
 while(getch() != 27);
 endwin();
 return 0;
}
[constab@localhost cc]$ cc temp.c
temp.c:9:3: warning: no newline at end of file
/home/constab/tmp/cctNmyNP.o(.text+0x1d): In function `main':
: undefined reference to `initscr'
/home/constab/tmp/cctNmyNP.o(.text+0x22): In function `main':
: undefined reference to `cbreak'
/home/constab/tmp/cctNmyNP.o(.text+0x2b): In function `main':
: undefined reference to `stdscr'
/home/constab/tmp/cctNmyNP.o(.text+0x30): In function `main':
: undefined reference to `wgetch'
/home/constab/tmp/cctNmyNP.o(.text+0x3f): In function `main':
: undefined reference to `endwin'
collect2: ld returned 1 exit status
[constab@localhost cc]$
Хачу крыху паразумнець!

Аватара пользователя
constab
Неотъемлемая часть форума
Сообщения: 241
Зарегистрирован: 17 авг 2004, 11:36
Откуда: Минск
Контактная информация:

Сообщение constab »

Может нужно использовать не

Код: Выделить всё

#include <curses.h>
а что-то другое??
Приду домой, попробую поискать, какую библиотек нужно использовать...
Хачу крыху паразумнець!

sensor
Заглянувший
Сообщения: 23
Зарегистрирован: 06 май 2005, 21:13

Сообщение sensor »

prosto nado podklichit libi

cc -lcurses temp.c

ili tak

cc -lncurses temp.c

tochno ne znay
sensor:~$ ls -lah /dev/hands
lrwxrwxrwx 1 root root 12 2005-12-10 23:39 /dev/hands -> /dev/ass
sensor:~$

Аватара пользователя
constab
Неотъемлемая часть форума
Сообщения: 241
Зарегистрирован: 17 авг 2004, 11:36
Откуда: Минск
Контактная информация:

Сообщение constab »

sensor писал(а):prosto nado podklichit libi

cc -lcurses temp.c

ili tak

cc -lncurses temp.c

tochno ne znay
Все отлично скомпилировалось...
Использовал параметр -lcurses.

ВСЕМ БОЛЬШУЩЕЕ СПАСИБО!!!
Хачу крыху паразумнець!

Ответить