POSIX против Linux
Сначала несколько фактов:
- POSIX - это стандарт, разработанный органом по стандартизации. POSIX не реализует ничего , а скорее определяет набор функций и поведение интерфейсов. Частью этого определения является несколько страниц руководства - «Руководство программиста POSIX»
- Linux реализует стандарт POSIX, как и другие операционные системы UNIX. (Я не знаю, является ли Linux «сертифицированным POSIX», и мне все равно.) При реализации стандарта POSIX, Linux дает свободу расширять стандарт с помощью Linux Speci c функций; следовательно, он содержит собственный набор справочных страниц, "Linux Руководство программиста".
Глядя на справочную страницу Linux ("man 2 mmap
"), вы можете видеть, что она определяет Например, бит MAP_LOCKED
в аргументе flags (кстати, MAP_LOCKED
делает отдельный вызов mlock()
ненужным). Этот флаг не отображается на справочной странице POSIX ("man 3 mmap
"), поскольку он не требуется стандартом POSIX для соответствующей реализации.
Тем не менее, нет способа использовать альтернативную реализацию mmap()
в Linux. Если какой-то исходный код, который вы читаете, использует mmap()
, а вы используете Linux, то используется реализация Linux mmap()
, просто потому, что его реализация POSIX отсутствует.
Соответственно, версия POSIX содержит в реализации Linux. Linux «совместим» с POSIX, так сказать - он не переопределяет никакие функции, требуемые POSIX (это будет означать нарушение стандарта), но добавляет только расширения, такие как MAP_LOCKED
выше.
Страницы справочника
Хм. Мое личное мнение таково, что версия POSIX, скажем, справочной страницы mmap
предназначена только для того, чтобы сбить с толку пользователей. Если вы случайно попали в раздел «3» mmap()
man-страница и не знаете, каковы отношения между POSIX и Linux, то вы действительно в лучшем случае запутались, а в худшем - на неправильном пути.
Я предлагаю вам опустить номер раздела и просто сказать «man mmap
» - при этом во всех разделах руководства выполняется поиск «mmap» и останавливается на первом (точное определение см. В «man man
») .
(Это не работает так, как предполагалось с "man write
", когда вы ищете определение системного вызова write()
, потому что есть команда "write
" с таким же раздел «1» :-))
Системные вызовы
Как указано в «man man
», ручной раздел «2» содержит документацию по системным вызовам. Знание того, что mmap()
реализовано ядром Linux (потому что именно ядро реализует основные функции ОС, такие как управление памятью), может только помочь устранить путаницу в том, что документация, которую вы читаете, - это то, что вам нужно.