Вопрос

Существуют ли различия между количеством системных вызовов в основных вариантах * NIX?

Какие системные вызовы будут поддерживаться повсеместно?

Это было полезно?

Решение

Все, что не является стандартом posix, может быть дополнительным системным вызовом или дополнительными функциональными возможностями библиотеки над уровнем системных вызовов. Если ваша цель - записать переносимый код-стик в posix и максимально использовать библиотеку c (в отличие от прямых системных вызовов).

Если вам просто любопытно, они очень разные. Вам не нужно много поддерживать системные вызовы, чтобы быть posix-совместимым. Он определяет интерфейсы, которые вам нужно поддерживать, но решать, будете ли вы делать это посредством вызова ядра или перехода в общую библиотеку.

Mac OS X даже не гарантирует двоичную совместимость для системных вызовов между выпусками, они считают их частными интерфейсами между системными библиотеками и ОС. То, что большинство людей считают системными вызовами, на самом деле представляют собой небольшие заглушки в динамической библиотеке, которые обращаются к ядру, и если вы делаете системные вызовы напрямую, вместо того, чтобы ссылаться на эту динамическую библиотеку и вызывать функции-заглушки, ваш код может прерваться между ОС релизов.

Эта гибкость означает, что ряд ОС реализуют системные вызовы, которые полностью отличаются от того, что им нужно для поддержки posix, а затем решают проблемы, возникающие в их библиотеках. Например, реализация многопоточности Linux основана на системном вызове clone (), и они занимаются большей частью бухгалтерии, чтобы заставить интерфейс pthreads работать в своих библиотеках.

Таким образом, если ваша цель состоит в том, чтобы реализовать стандартную библиотеку, которая не привязана ни к чему другому и работает на нескольких Unix-системах, в некоторых случаях вы можете столкнуться с некоторыми сложностями. Если ваша цель - написать что-то, связанное со стандартными библиотеками в различных Unix-системах, вы можете получить в целом унифицированный интерфейс.

Другие советы

Лучшее, что я могу найти - это Unix- Шпаргалки Linux-BSD , для различных вариантов системных вызовов, сравниваются с Системные вызовы Solaris .

Только для Unix количество системных вызовов увеличилось в четыре или более раз в зависимости от того, что вы подразумеваете под "системным вызовом".
Первое издание Advanced UNIX Programming было сосредоточено только на 70 подлинных системных вызовах ядра, например, open, read и write; но не библиотечные вызовы, такие как fopen, fread и fwrite.
Во втором издании около 300. (Всего около 1100 вызовов стандартных функций, но многие из них являются частью библиотеки Standard C или, очевидно, не являются средствами ядра.)
Сегодняшний UNIX имеет потоки, сигналы в реальном времени, асинхронный ввод-вывод и новые функции межпроцессного взаимодействия (POSIX IPC), ни один из которых не существовал 20 лет назад

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top