Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Системные вызовы ядра и библиотека glibc 
:(
    Опции темы
vv4567vv
Дата 29.12.2016, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 29.12.2016

Репутация: нет
Всего: нет



Изучаю программирование под linux, что бы процесс изучения не был скучным решил написать игру - морской бой.
Игра будет работать в консоли - буквы цифры, начиная 80x25 и с большим разрешением. Графика символами псевдографики.
Хочу написать данную игру используя только системные вызовы ядра, повторяю 
ТОЛЬКО СИСТЕМНЫЕ ВЫЗОВЫ ЯДРА!!!!
Сразу предвижу шквал предложений использовать библиотеку glibc, ncurses.
Но ведь библиотека ncurses сама работает через системные вызовы ядра linux.
Я прав?
Вот я и хочу разобраться как можно написать эту игру используя только системные вызовы ядра linux!!!!
Приступая к делу обнаружил пробелы в ряде вопросов.
Итак:
Немного отступлю от темы, просто хотелось бы выяснить некоторые вопросы.
Первый момент общий по поводу библиотеки Си - glibc.
Я понимаю так, что библиотека glibc виртуальная, в ней нет ассемблерного кода, а значит она вызывает системные вызовы ядра и работает только через них и никак иначе, что логично. Правильно ли я понимаю?
Если это так, то из этого следует второй момент.
Если я не ошибаюсь то файл текущего терминала /dev/tty, не важно какой это терминал: виртуальный и открыт в графическом эмуляторе терминала, не виртуальный соединённый через com порт, буквенно цифровой 80x25 и т.д. файл текущего открытого терминала в котором работают всё равно будет /dev/tty правильно я понимаю, это так?
Далее если это так, то используя только системные вызовы ядра, повторяю только системные вызовы ядра, в терминал я могу при неканоническом вводе, вводить символы и выводить их, следующими системными вызовами ядра write и read при этом в начале не забыв для файла терминала /dev/tty назначить дескриптор - функцией open, а в конце работы закрыть этот файл системным вызовом close. Правильно ли я понимаю?
Если всё выше изложенное правильно то тогда идём дальше.
Как мне при помощи системных вызовов ядра, опять же повторяю только системных вызовов ядра, не использую функции библиотеки glibc, получить информацию о терминале. Например геометрию терминала, сколько в открытом терминале символов по горизонтали и строк и т. д.
Конкретно какая мне ещё будет нужна другая информация кроме числа символов и строк я ещё не знаю. Но число символов и число строк нужно что бы правильно "разрисовать" интерфейс программы в терминале. Он будет состоять из символов псевдо-графики, для морского боя хватит.
Да вот ещё нужно узнать какая локализация, koi8-r, utf8 или ещё какая и наверное перевести локализацию в utf8.
В библиотеке glibc очень много функций для работы с терминалом:
isatty, tcsetattr, tcgetattr и т.д. очень много всяких структур данных. Конечно при помощи этих функций и структур данных можно работать с терминалом. Но я хотел бы узнать как можно полноценно работать с терминалом не используя библиотеку glibc, а пользуясь только системными вызовами ядра.
Ну например как я уже писал выше, ввести данные и вывести я уже знаю как write, read, open, close, а вот как получить какое в используемом терминале /dev/tty количество символов и строк при помощи системных вызовов ядра?

В моём посте я всё время повторяю - системные вызовы ядра, потому, что хотел узнать как можно это реализовать не используя библиотеки glibc или ncurses!!!!

Предвижу ещё вопросы, а сможешь ли ты вообще написать саму логику игры и т. д. С разработкой самого алгоритма игры у меня проблем нет. Разные алгоритмы я разрабатываю без проблем. У меня проблемы, а вернее отсутствие знаний по самому ядру linux. Вот как бы его и изучаю, возникли вопросы, поэтому и спрашиваю на этом форуме.

За помощь буду заранее благодарен!
PM MAIL   Вверх
feodorv
Дата 30.12.2016, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 1
Всего: 45



Цитата(vv4567vv @  29.12.2016,  13:31 Найти цитируемый пост)
Вот я и хочу разобраться как можно написать эту игру используя только системные вызовы ядра linux!!!!

Цитата(vv4567vv @  29.12.2016,  13:31 Найти цитируемый пост)
то используя только системные вызовы ядра, повторяю только системные вызовы ядра

Цитата(vv4567vv @  29.12.2016,  13:31 Найти цитируемый пост)
Как мне при помощи системных вызовов ядра, опять же повторяю только системных вызовов ядра

Гм. Флаг Вам в руки))) Вас ждёт масса открытий)))

Читайте исходные коды библиотек, как они обустраивают свою работу с ядром. Изучайте исходные коды различных утилит, работающих с консолью. Изучайте исходные коды ядра, в конце концов.

ЗЫ Задача, которую Вы перед собой поставили, не стоит всех этих усилий. А если вдруг еще и поменяется версия ядра....


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1092 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.