Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2016, 12:08   #1
v4567
Пользователь
 
Регистрация: 06.07.2008
Сообщений: 91
По умолчанию Системные вызовы ядра и библиотека glibc

Изучаю программирование под 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. Вот как бы его и изучаю, возникли вопросы, поэтому и спрашиваю на этом форуме.

За помощь буду заранее благодарен!
v4567 вне форума Ответить с цитированием
Старый 29.12.2016, 12:52   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Что мешает посмотреть в исходниках glibc?
waleri вне форума Ответить с цитированием
Старый 29.12.2016, 12:56   #3
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от v4567 Посмотреть сообщение
количество символов и строк при помощи системных вызовов ядра?
Код:
winsize tp;
ioctl(STDOUT_FILENO, TIOCGWINSZ, &tp);
//tp.ws_row
//tp.ws_col
оно?

Последний раз редактировалось Croessmah; 29.12.2016 в 12:59. Причина: шкопку жабыль
Croessmah вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
*** glibc detected *** double free or corruption Stilet Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 2 13.05.2014 20:50
Системные вызовы в Linux 8Observer8 Qt и кроссплатформенное программирование С/С++ 0 14.09.2012 11:32
Системные вызовы Linux| C Демик Помощь студентам 1 16.04.2012 23:29
Ошибка:*** glibc detected *** free(): invalid next size (fast): 0x0807dc70 *** ciaonataha Общие вопросы C/C++ 3 05.05.2009 16:58
Системные вызовы... bek@rt Win Api 2 03.05.2007 02:48