Аналоги библиотек bios.h и conio.h в linux

Приветствую всех пользователей самой правильной ОСи!
Знает ли кто нибудь аналоги библиотек bios.h и conio.h в linux?
Гугл ответов не дал. На ЛОРе предлогали сделать через перехват управления клавиатурой, но такой вариант меня не устраивает,
так как при аварийном завершении программы будет потеряно управление клавиатурой.
Если есть на форуме опытные программеры, подскажите что нибудь.

За время участия в нашем

За время участия в нашем сообществе вы могли бы уже научится спрашивать решение _проблемы_, а не вашего видения этой проблемы.

По делу: я понятия не имею, что делают заголовочные файлы bios.h и conio.h (т.к. никогда не программировал под не лучшую в мире ОС =)), зачем они нужны, но подозреваю, что делает много и разного. Также я подозреваю, что bios.h предоставляет какие-то функции работы с биосом напрямую. Тут вы обломитесь, ибо это не ДОС и тут доступ до железа, в т.ч. до железного firmware (в т.ч. до BIOS), запрещен. Даже если вы как-то хитро попробуйте извернуться и таки получить доступ до железа напрямую, результатом будет только то. что ядро убьет ваш нерадивый процесс.

И это, заметьте, правильно и решает очень многие проблемы дос-подобных систем. Так что, с 99% вероятностью, вам такой функционал не нужен. Скажите что вам нужно сделать, быть может вам подскажут какой функционал для этого можно (нужно) использовать. Ну или если вы хотите огрести радости на свою буйную голову - можете написать модуль для ядра, там можно делать все и как угодно. В т.ч. там наверняка есть какие-то педали для управления биосом и клавиатурой.

P.S. "так как при аварийном завершении программы будет потеряно управление клавиатурой.". а) не надо писать программы с расчетом на аварийное завершение. б) когда программа завершается, по любым причинам, любое управление ей чего-либо должно быть прекращено. Или вы что-то иное имели ввиду?

Попытаюсь объяснить что

Попытаюсь объяснить что конкретно мне надо.

Функция            Интерфейс с клавиатурой при помощи функций BIOS.

Синтаксис          #include<bios.h>
                   int bioskey(int cmd);

Файл, содержащий   bios.h
прототип

Описание           bioskey посредством прерывания BIOS 0x16 выполняет
                   различные операции  c  клавиатурой.  Параметр   cmd
                   определяет операцию.

Возвращаемое       Значение, возвращаемое функцией bioskey, зависит от
значение           выполняемой операции, которая определяется
                   аргументом cmd:

                   ---------------------------------------------------
                   cmd    Операция
                   ---------------------------------------------------
                   0      Если младшие 8 бит не нулевые, bioskey
                          возвращает код   ASCII   следующей   нажатой
                          клавиши, ожидающей в очереди. Если младшие 8
                          битов  равны 0,  то старшие 8 битов содержат
                          расширенные   коды   клавиатуры,    описание
                          которых   вы   можете   найти   в  документе
                          "Техническое справочное руководство  по  IBM
                          PC".

                   1      Производится проверка, имело ли место
                          нажатие клавиши.    Если    при     проверке
                          возвращается значение 0,  это означает,  что
                          клавиша не была нажата.  В противном  случае
                          возвращается   значение   очередной  нажатой
                          клавиши.  Сам  же  код   очередной   нажатой
                          клавиши  сохраняется  и  будет возвращен при
                          следующем   вызове   функции   bioskey   при
                          значении параметра cmd, равном нулю.

                   2      Запрашивает  текущий  статус клавиш типа
                          SHIFT. Значение  получается  при  логическом
                          сложении следующих кодов (операции "ИЛИ")
                   
                          Бит 7  0x80     INSERT  нажат
                          Бит 6  0x40     CAPS нажат
                          Бит 5  0x20     NUM LOCK нажат
                          Бит 4  0x10     SCROLL LOCK нажат
                          Бит 3  0x08     ALT  нажат
                          Бит 2  0x04     CTRL  нажат
                          Бит 1  0x02     LEFT SHIFT нажат
                          Бит 0  0x01     RIGHT SHIFT нажат

Переносимость      bioskey поддерживается только на компьютерах IBM PC
                   или совместимых с ними.

Пример:

#include <stdio.h>
#include <bios.h>
#include <ctype.h>

#define RIGHT 0x0001
#define LEFT  0x0002
#define CTRL  0x0004
#define ALT   0x0008

int main(void)
{
  int key, modifiers;

  /* Функция 1 возвращает 0, пока не будет
  нажата клавиша. Ожидание  ввода. */;                                                                           /* now use function 0 to get return value of
  while (bioskey(1) == 0);

  /* Теперь используем функцию 0, чтобы получить
  значение клавиши  */
  key = bioskey(0);

  /* Используем функцию 2, чтобы определить,
  используются ли клавиши типа SHIFT */.
  modifiers = bioskey(2);
  if (modifiers) {
     printf("[");
     if (modifiers & RIGHT) printf("RIGHT ");
     if (modifiers & LEFT ) printf("LEFT ");
     if (modifiers & CTRL ) printf("CTRL ");
     if (modifiers & ALT  ) printf("ALT ");
     printf("] ");
}
/* вывести символ нажатой клавишу */
if (isalnum(key & 0xFF))
   printf("'%c'\n",key);
else
   printf("%#02x\n",key);
}

мне эта библиотека нужна для навигации по графическому интерфейсу (как у mc).

conio.h (от англ. console input-output — консольный ввод-вывод) — заголовочный файл, используемый в старых компиляторах, работающих в операционных системах MS-DOS, для создания текстового интерфейса пользователя. Тем не менее, он не является частью языка программирования Си, стандартной библиотеки языка Си, ISO C или требуемой стандартом POSIX.

Этот заголовочный файл объявляет несколько библиотечных функций для работы с «консольным вводом и выводом» программы. Большинство компиляторов языка Си, предназначенных для DOS, Windows 3.x, Phar Lap, DOSX, OS/2 или Win32 имели этот файл и обеспечивали сопутствующие библиотечные функции в библиотеке Си по умолчанию. Большинство компиляторов языка Си, предназначенных для UNIX и Linux, не имеют этого файла и не обеспечивают сопутствующих библиотечных функций.

от этой библиотеки мне нужна функция int getch(void) которая считывает символ напрямую из консоли без использования буфера и echo-вывода.

Вот как-то так.

Если ничего не помогает, прочти наконец инструкцию...

По поводу conio: Вам

По поводу conio: Вам требуется сделать _свой_ интерфейс? Если нет - грамотнее будет воспользоваться ncurses. man getch - там подробно описано.

Насчет i/o - это такой страшный велосипед. Вы можете включить rawhid в ядре и читать прямо то, что кидает вам клавиатура (это будет практически аналогично), но, все же, лучше воспользоваться стандартными интерфейсами, например т.н. evdev (/dev/input/event*). Как им пользоваться можно посмотреть в сотне различных прог вроде jstest и actkbd.

Ну и да, в 99% случаев это не нужно. ncurses предоставляет все возможности для ввода/вывода без таких ухищрений (если, опять же, ваше задача не состоит в преднамеренном усложнении себе жизни). По ncurses найти информацию очень просто, в т.ч. огромное количество примеров, даже очень мелких, вроде aplay.

Если говорить от навигации

Если говорить от навигации "как в mc", то упоминание ncurses несколько устарело. mc давным давно использует библиотеку slang. Автор же топика говорит о "графическом интерфейсе", что наводит на мысль об иксовых приложениях. В связи с чем неплохо было б узнать с помощью какой библиотеки он этот графический интерфейс реализует, ибо под линем вариаций выше крыши, начиная с голого икса или простеньких fltk/fox и заканчивая монстрами типа qt/gtk.

Сырье из клавиатуры можно прочесть из /dev/input/..... но делать сие позволено только руту ( и всем кто входит в группу рут ) по вполне понятным причинам. Ни один рут не отдаст вам возможность перехватывать клавиатурный ввод от всех программ.

>Сырье из клавиатуры можно

>Сырье из клавиатуры можно прочесть из /dev/input/..... но делать сие позволено только руту ( и всем кто входит в группу рут ) по вполне >понятным причинам. Ни один рут не отдаст вам возможность перехватывать клавиатурный ввод от всех программ.

можно создать демона и пинать его по dbus напимер )

Я понимаю "навигация как в

Я понимаю "навигация как в mc" в более широком смысле - всмысле "псевдографика". И я на 99% процентов уверен, что автор имел ввиду именно её. С псевдографикой работает несколько библиотек, в т.ч. и slang. Однако мне более известна ncurses и я могу назвать хотя бы одну небольшую программу её использующую. Про сланг я знаю весьма мало, увы. Может вы чего посоветуете.

Про /dev/input/...: ну, человек же просит аналог педалей биоса в виндах. Я думаю (надеюсь!), что использование этих педалей обычным смертным там тоже запрещено. Их (обычных смертных) там, правда, редко видят...

Тут вся соль в постановке задачи. Если это какой-нить институтский маразм, который просто не рассчитан на то, что кто-то будет писать в среде отличной от Х (причем именно среде, а не ОС, так часто бывает), то тут покатит что угодно. Если же требуется порт существующего решения с виндов на линукс, то тут надо смотреть на оригинальную архитектуру - переписывание на ncurses/slang/... может оказаться чрезмерным (хотя и чтение /dev/input тоже).

В общем мой вам совет

В общем мой вам совет посмотрите как устроем stdio в линуксе. из ваших постов я например так и не понял что конкретно вы хотите сделать кейлоггер какой?

Как раз я вначале и подумал

Как раз я вначале и подумал про stdin/stdout, но нормальной документации так и не нашел.
А вообще мне надо некий аналог bioskey, тоесть чтение символа с клавиатуры. В примере выше все достаточно хорошо показано и расказано.
Да я знаю что это педали, но выбора у меня нету...

Вот что конкретно мне надо:
на экран выводится квадрат (например) и при помощи стрелок на клавиатуре пользоваетль может управлять этим квадратом по экрану.
Буду очень благодарен если кто нибудь поделится исходным кодом с коментариями.

Если ничего не помогает, прочти наконец инструкцию...

Это надо сделать с

Это надо сделать с применением чисто системных библиотек? Или может можно использовать SDL?

посмотрите как сделано в

посмотрите как сделано в софте с подобными возможностями. Например, alsamixer.

Ну вы тут позагибали, сразу

Ну вы тут позагибали, сразу видно хардкодных программеров :)
квадрат по экрану гоняется с помощю 10 строчек на баше :).
И пакета dialog.

P.S alsaconf и прочие конфигурялки именно на нем :)

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

Интересует реализация только

Интересует реализация только на C/C++. На баше с диалогом я бы смог написать, ибо документация по нему есть.

Если ничего не помогает, прочти наконец инструкцию...

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".