Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

VPS в России, Европе и США

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

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Руководство программиста для Linux

Sven Goldt, Sven van der Meer, Skott Burkett, Matt Welsh

Перевод: Алексей Паутов,
Russian LDP: http://www.botik.ru/~rldp, ftp://ftp.botik.ru/rented/rldp

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

Введение

Однажды автор инсталлировал Linux на своем ПК, чтобы больше узнать о системе управления. Он пытался инсталировать slip сервер, который не таботал с теневыми программами и mggetty. Пришлось подправить sliplogin и все работало, но до нового релиза Linux 1.1. Никто не смог объяснить что приключилось, а комментарии Расса Нельсона (Russ Nelson) об измиенениях в ядре с версии 0.99 не слишком помогли.

Данное руководство призвано помочь программистам разобраться с особенностями Linux. Оно также освещает проблемы переноса программ с других операционных систем; влияющие на старые программы изменения в ядре и в системных вызовах, такие как последовательный ввод/вывод и работа по сети.

1. Операционная система LINUX

В марте 1991 Л.В.Торвальдс (Linus Benedict Torvalds) купил мультизадачную операционную систему Minux для своего AT 386. Он использовал ее для того, чтобы создать свою собственную мультизадачную ОС, которую назвал Linux. В сентябре 1991 года он распространил по e-mail ее первый прототип среди пользователей Minux. С этого момента многие стали поддерживать Linux, добавляя драйверы устройств, разрабатывая разные продвинутые приложения и учитывая соглашения POSIX. В настоящее время Linux - очень мощная система, но самое замечательное то, что она free. Ведется работа над Linux-ом для других платформ.

2. Ядро LINUX

Ядро является базой LINUX-а. Вы можете как угодно переставлять любую из библиотек, но пока есть ядро есть и LINUX. Оно включает в себя драйвера устройств, механизм распределения памяти, управление процессами и связями. Разработчики ядра стараются следовать рекомендациям POSIX, которые иногда осложняют, а иногда упрощают программирование. И если ваша программа поведет себя иначе на новой версии ядра, то вероятнее всего, в этой версии учтена еще какая-нибудь рекомендация POSIX. Информацию о ядре для программиста можно найти в Linux Kernel Hacker's Guide (Справочное руководство по ядру LINUX для программиста).

3. Библиотека libc

libc: ISO 8859.1, , YP функции, функции кодирования, некоторые базовые теневые программы (по умолчанию не добавлены), ..., старые программы для совместимости с libcompact (по умолчанию не запущены), сообщения об ошибках на английском, французском и немецком, bsd 4.4lite-совместимые программы работы с экраном в libcourses, bsd-совместимые программы в libbsd, программы работы с экраном в libtermcap, поддержка баз данных в libdbm, математика в libm, точка запуска программ в crt0.o (entry to execute programs in crt0.o ??? (-авторский знак)), байт sex-информации в libeee (??? объясните мне, лучше, что это такое, вместо того, чтобы ржать - автор), профилирование пространства пользователя в libgmon.

Автор надеется, что кто-нибудь из разработчиков libc напишет эту главу как положено. Все, что автор может на данный момент сказать, это то, что исполняемый формат a.out собираются поменять на elf (executable and lincable format - исполняемый и собираемый формат), что подразумевает изменения и в разделяемых библиотеках. В настоящий момент поддерживаются оба формата.

Большая часть libc находится под лицензией GNU (Library GNU Public License). Хотя попадаются и специальные исключения, например crt0.o. Для коммерческого использования это означает запрет на статически линкуемые программы. Динамически линкуемые программы, однако, тоже являются специальными исключениями.

4. Системные вызовы

Системный вызов - это требование к ОС (к ядру) произвести аппаратно/системно специфическую или привилегированную операцию. В Linux-1.2 были определены 140 системных вызовов. Такие вызовы, как close() реализованы в Linux libc. Эта реализация часто включает в себя макрос, который в конце концов вызывает syscall(). Параметры, передаваемые syscall-y - это номер системного вызова, перед которым ставятся требуемые аргументы. Номера системных вызовов можно найти в , а обновленные вместе с новой версией libc - в . Если появились новые системные вызовы, но их до сих пор нет в libc, вы можете использовать syscall(). Как пример, рассмотрим закрытие файла при помощи syscall-а (не советуем, однако):

#include
extern int syscall(int,...)
int my_close(int filedescriptor)
{
   return syscall(SYS_close, filedescriptor);
}

На i386 системные вызовы ограничены 5-ю аргументами кроме номера вызова из-за аппаратного числа регистров. На другой архитектуре вы можете поискать макрос _syscall в и там посмотреть сколько аргументов поддерживается у вас или $how many developers chose to support$. Макросами _syscall можно пользоваться вместо syscall(), но это не рекомендуется, поскольку макрос может развернуться в функцию, которая уже существует в библиотеке. Поэтому только ядреные хакеры имеют право поиграться с _syscall-ом :). Для демонстрации посмотрим на пример close(), использующий макрос _syscall.

#include
_syscall1 (int, close, int, filedescriptor);
     _syscall1 раскрывается в функцию close(), и мы получаем твикс:
один close() в libc и один в нашей программе.

Возвращаемое syscall()-ом (или _syscall-ом) значение есть -1, если вызов неудачен и 0 или больше в случае успеха. В случае неудачи ошибку можно определить по глобальной переменной errno.

Приведем системные вызовы, возможные в BSD и SYS V, но не допустимые в LINUX: audit(), audition(), fchroot(), getauid(), getdents(), getmsg(), mincore(), poll(), putmsg(), setaudit(), setauid().

5. ioсtl

iotcl предназначен для контроля ввода/вывода и используется для манипуляций с устройством через файловый дескриптор. Формат ioсtl:

ioсtl(unsigned int fd, unsigned int request, unsigned long argument)

Возвращаемое значение есть -1 в случае ошибки, 0 и больше если команда (request) прошла так же, как другие системные вызовы. Ядро различает специальные и регулярные файлы. Специальные файлы в основном находятся в /dev и /proc. Они отличаются от регулярных файлов тем, что прячут свое описание в драйвер, тогда как регулярные файлы содержат текст или двоичные данные. Эта философия UNIX-а, которая позволяет вводить/выводить из любого файла. Но если вам хочется сделать что-нибудь особенное со специальным файлом, вы можете это сделать при ioсtl. В основном ioсtl нужен для борьбы со специальными файлами, но его можно использовать и для обычных.

Содержание | Вперед

 

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...