Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Вывод конфигурации компьютера и управление клавиатурой, компилятор gcc  (Прочитано 2983 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн eWaLL

  • Автор темы
  • Участник
  • *
  • Сообщений: 171
    • Просмотр профиля
Здраствуйте, это снова я.
Мне нужно написать программу на лабораторную работу:

Задание в двух словах:
Задание 1. Для компьютера на своем рабочем месте определить:

    * тип компьютера;
    * конфигурацию оборудования;
    * объем оперативной памяти;
    * наличие и объем расширенной памяти;
    * наличие дополнительных ПЗУ;
    * версию операционной системы.

Задание 2. Разработать программу обработки прерывания от клавиатуры, которая должна:

    * распознавать нажатие "горячей" комбинации клавиш и реагировать на него звуковым сигналом;
    * при первом нажатии "горячей" комбинации переходить в режим блокировки ввода заданной клавиши, при втором - отменять этот режим;
    * системная обработка всех других клавиш нарушаться не должна.


Полная версия задания:
http://zalil.ru/29918966


В документе есть пример для Борландского компилятора, пример реализован с помощью библиотеки dos.h (в gcc подбной библиотеки и близко нету), и плюс в примере есть ошибки (люди с моей группы говорят, что не компилируется никак, пример попросту слизан нашим любимым преподом откудова-то, и содержит серьезные ошибки). Так вот, а мне, как единственному Linuxоиду со всего потока системных программистов, была поставлена отдельная задача - рализовать на gcc. Мне не нужно делать программу за меня, подскажите только, в какую сторону копать? Где найти все эти функции? Может, искать в гугле по одной функции из программы, и написать самому все аналоги для gcc? Но в таком случае, у меня создается навязчивое ощущения, что я конструирую велосипед.

Оффлайн hippi90

  • Активист
  • *
  • Сообщений: 433
    • Просмотр профиля
По первому, копайте в сторону /proc, там можно найти всю инфу о компьютере.

Оффлайн eWaLL

  • Автор темы
  • Участник
  • *
  • Сообщений: 171
    • Просмотр профиля
Хорошо, а как направить вывод с /proc в мою программу?

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Всё есть файл. Открываешь и читаешь.

Оффлайн eWaLL

  • Автор темы
  • Участник
  • *
  • Сообщений: 171
    • Просмотр профиля
Хорошо, а что со второй частью?
Нужно, чтобы при нажатии на комбинацию l_Shift+l_Ctrl+F2 блокировался ввод клавиши "2", как реализовать? Борландовский компилер делает это средствами dos.h

Оффлайн WereBeast

  • Любитель
  • *
  • Сообщений: 85
    • Просмотр профиля
У меня вопрос: почему при программировании под Linux упоминается борландовский компилятор, да еще и с инклудом dos.h?

Программирую пропаганду
Windows - в гландах

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Просто они не различают
- DOS и Linux
- реальный и защищённый режимы микропроцессора i386
И много чего другого...

Совет топикстартеру:
Бершь VirtualBox, ставишь на него дремучий MS DOS (ну Win9x на крайняк если с досом напряженка), ставишь туда дремучий Borland C++ 3.0 (такой весь прикольный, текстовый как MidnightComander), выполняешь в этой среде свою лабу и сдаешь её не менее дремучему преподу-идиоту.
Так будет проще всего.

Если тебе так не интересно тогда удосужся изучить основы защащенного режима i386 и основы построения операционных систем (книжка Таненбаума поможет). После этого будешь задавать вопросы.

Оффлайн eWaLL

  • Автор темы
  • Участник
  • *
  • Сообщений: 171
    • Просмотр профиля
Нет уж, вы меня извините, но препода своего в обиду не дам  >:(

Просто политика у него такая: во всех примеры даны для борландовского компилятора, но на борландовском делают те, кому не нужна пятерка.
Остальные пусть ищут сами информацию и делают в нормальных компиляторах (в основном имеется в виду vc для операционной системы, которая на даный момент более распространенная).
А если в двух словах, то в чем проблема? Насчет первой части, то я узнал, что нельзя читать данные из области BIOS, как делается в примерах - ну и ничего, делаю через /proc . Конечно я представляю удивленные глаза препода, ведь в примере для борланда находится хитрющий код на пару сотен строк, а у меня будет всего лишь чтение и вывод текста из файла, и обдумываю, как я буду рассказывать ему, что это за директория - /proc, и почему слэши смотрят в другую сторону  :)

Но в чем такая прямо проблема со второй частью? Ведь я покопался в манах, и нашел, что через /proc можно еще и управлять прерываниями. Вот только где найти инбормацию, подходящую конкретно мне?

Кстати, книгу прочту обязательно, препод сам рекомендовал нам прочесть ее, говорил, что она должна помочь.

Оффлайн mkarasik

  • Участник
  • *
  • Сообщений: 163
    • Просмотр профиля
А че в гугле забанили? После 5 минут находиться вот такой вопрос http://stackoverflow.com/questions/144901/system-wide-keyboard-hook-on-x-under-linux там ссылка на Хграб. Или берешь исходники или дальше гуглишь. Про прерывания забудь если только нет желания перестроить кернел и влепить свой код прямо в драйвер клавиатуры или его фреймворк чуть повыше. Ну или кернел модуль свой написать и оттуда забрать управление себе. Может это кто и сделал уже, не знаю, бо сам клавиатурой никогда не занимлся.
А вообще для начала
Цитировать
Если тебе так не интересно тогда удосужся изучить основы защащенного режима i386 и основы построения операционных систем (книжка Таненбаума поможет). После этого будешь задавать вопросы.

Оффлайн eWaLL

  • Автор темы
  • Участник
  • *
  • Сообщений: 171
    • Просмотр профиля
Спасибо за ссылку, в гугле не забанили, но с английским туго очень  :(
Приступаю к изучению. Один только маленкий вопрос, понимаю, что книгу я еще не прочитал, знаю, что вам он покажется глупым, но все же, разве нельзя в Linuxе как-нибуть именно с помощью управления прерываниями указать, чтобы после нажатия на комбинацию клавиш блокировалась, скажем, кнопка "2", а при повторном нажатии - разблокировать ее? Неужели без модификации ядра это нельзя реализовать?
Извиняюсь еще раз, если вопрос мой глупый.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
именно на уровне прерываний придется либо модифицировать существующие модули ядра либо писать новый модуль. перехват управления внутри ядра дело тривиальное. а книжку прочти. и купи себе англо русский словарь уже. =)

Оффлайн eWaLL

  • Автор темы
  • Участник
  • *
  • Сообщений: 171
    • Просмотр профиля
Ладно, а вобще в Linuxе есть какие-либо утилиты, чтобы сделать такое? Через консоль или еще как-нибуть?
Мне не обязательно блокировать клавишу именно через прерывания, просто у меня есть пример для компилятора Борланд, в котором даное действие реализовано через сабж, используя библиотеку dos.h . Это только сейчас я понял, что у Linuxа принципиально другая архитектура, и так просто сделать это не получится.

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3473
  • nix - вот оно счастье...
    • Просмотр профиля
а если покапаться в исходникак xneur думаю перехват клавиш там как нигде написан
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
... Это только сейчас я понял, что у Linuxа принципиально другая архитектура, и так просто сделать это не получится.
:2funny:

Поздравляю!
На самом деле заблокирвать можно так же как и в ДОС-е, только для этого нужно написать модуль ядра
Который при загрузке запомнит обработчик прерывания клавиатуры и пропишет себя на его место.
В работе будет обрабавтывать прерывания от клавы и вызывать оригинальный обработчик (который запомнили при загрузке). А при получении определенного скан-кода бликировать/разрешать передачу ориганальному обработчику.
При выгрузке восстановит оригинальный обработчик обратно где был.

В ядре еще туева хуча мест где можно осуществить данную задачу с разной степенью геморойности реализации, шанса поломать систему и т.д.

В юзер-спейсе это сделать невозможно.
Действие XGrabKey распространяется только на X11 и на сколько я понял она осуществляет лишь перехват нажатий клавишь. Приложению назначения события о нажатии клавиш все равно придут.

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
По первой части - еще есть утилита dmidecode, тоже много полезного о системе пишет, можно ее исходники посмотреть.
А также lshw
« Последнее редактирование: 17 Ноября 2010, 15:43:55 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

 

Страница сгенерирована за 0.018 секунд. Запросов: 22.