Linux: простой web сервер на asm

Спятил, да? А ещё если напишу, что планировал сделать многопоточность и нечто CGI-интерфейса? Вполне может быть, в рамках just for fun

Но остановился на том, чтоб отдавать статические страницы – время не дало допилить, да и энтузиазм уменьшился. Идея мне пришла из за курсовой работа по “Системному программированию” В СПбГУ ИТМО. Всех заставили писать резидент под DOS, на 8086 архитектуре. Не торт.

Основные фитчи, которые я успел реализовать:

  • Форк, при необходимости
  • Чтение конфига(ini-like)
  • Создание слушающего сокета, установка параметров
  • Парсер заголовков и запроса
  • Обработчик запросов статического контента(не в /cgi-bin/)
  • В некоторых местах совершенно корявую работу со стеком

Реализовано на NetwideASM, c частичным использованием функций glibc. Работать сервер будет только на 32-битном процессоре i686+, из за того, что дёргается прерывание ядра Linux – а номера функций отличаются в зависимости от процессора.

Read more

Dosemu: Disk-device/file [..] doesn’t exist

Очень давно у меня в генте был dosemu, который со временем снёс за ненадобностью. Сейчас он снова понадобился, emerge dosemu прошёл успешно, а вот запускать отказался:

$ xdosemu
In file included from built-in global.conf:677
                 from built-in global.conf:634
Error in built-in global.conf: (line 672)
   Disk-device/file /var/lib/dosemu/drives/k doesn't exist.
1 error(s) detected while parsing the configuration-file

И вот чё прикопался?!

10 минут вдумчивого вкуривания конфига /etc/dosemu/global.conf показали что путь к дискам относительный, т.е. был (у меня строка 73)

$_hdimage = "drives/*"

Поменял на

$_hdimage = "/etc/dosemu/drives/*"

Ошибка ушла :)

Удобный доступ к конфигу/массиву

Долго думал как назвать пост. Иногда очень достают километровые строки для доступа к массиву(как правило километры – именно в конфиге), например:

$this->config->config['siteconfig']['someavatar']['normal']['height']

А хочется что – то более лаконичное, вроде

$this->_siteConfig('someavatar', 'normal', 'height');

или может даже

$this->_siteConfig('someavatar/normal/height')

Read more