Как правило, вы всегда должны использовать версию библиотеки C. У них часто есть обертки, которые обрабатывают эзотерические вещи, такие как перезапуск по сигналу (если вы запросили это). Это особенно верно, если вы уже связались с библиотекой. Все правила имеют причины для нарушения. Причины использования прямых звонков,
- Вы хотите быть
libc
агностиком; Возможно с установщиком. Такой код может работать на Android (bionic), uClibc и более традиционные системы glibc/eglibc, независимо от используемой библиотеки. Кроме того, динамическая загрузка с помощью оболочек для создания слоя glibc/bionic во время выполнения, позволяющего использовать двойной двоичный файл Android/Linux.
- Вам нужна экстремальная производительность. Хотя это, вероятно, редкость и, скорее всего, ошибочно. Вероятно, переосмысление проблемы даст больше преимуществ в производительности, а отказ от обращения к системе часто является выигрышем в производительности, что иногда может делать
libc
.
- Вы пишете
initramfs
или init
код без библиотеки; чтобы создать образ меньшего размера или ускорить загрузку.
- Вы тестируете новое ядро/платформу и не хотите усложнять жизнь полноценной файловой системой; очень похоже на
initramfs
.
- Вы хотите сделать что-то очень быстро при запуске программы, но в конечном итоге хотите использовать подпрограммы
libc
.
- Чтобы избежать известной ошибки в
libc
.
- Функциональность недоступна через
libc
.
Извините, но большинство примеров специфичны для Linux, но обоснования должны применяться и к другим вариантам Unix. Последний пункт довольно распространен, когда в ядро вводятся новые функции. Например, когда kqueue
или epoll
при первом появлении не было libc
для их поддержки. Это также может произойти, если в системе установлена более старая библиотека, но более новое ядро, и вы хотите использовать эту функциональность.
Если ваш процесс не использовал libc
, то, скорее всего, что-то в системе будет. Кодируя свои собственные варианты, вы можете свести на нет кеш, предоставив два пути к одной и той же конечной цели. Кроме того, Unix будет совместно использовать кодовые страницы между процессами. Как правило, нет причин не использовать версию libc
.
Другие ответы уже сделали звездную работу по разнице между libc
и системными вызовами.
person
artless noise
schedule
24.03.2013