Системные вызовы или библиотечные функции? (С)

Модератор: Модераторы разделов

Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Системные вызовы или библиотечные функции?

Сообщение Stauffenberg »

Всем привет.

Даже не вопрос, а скорее обсуждение, так как, как я понял, однозначного ответа в данном случае быть не может. Что предпочитаете и почему: системные вызовы или библиотечные функции (их аналоги)? Просто хотелось бы выслушать мнения за и против. В каком случае стоит использовать syscalls, а когда стоит прибегнуть к glibc?

Сам я использую syscall. Проверяю значение через perror(). Проблем с переносом программ с одной архитектуры на другую или просто при миграции на системы с более новыми ядрами, пока не имел (пока во всяком случае).
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Системные вызовы или библиотечные функции?

Сообщение serzh-z »

Stauffenberg писал(а):
16.02.2014 02:12
В каком случае стоит использовать syscalls, а когда стоит прибегнуть к glibc?
Вопрос явно с подвохом и вызвает недоумение. Нужна привязка к ядру - используй системные вызовы. Нужна привязка к переносимому слою - используй библиотеку C.
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: Системные вызовы или библиотечные функции?

Сообщение Stauffenberg »

serzh-z писал(а):
16.02.2014 02:53
Stauffenberg писал(а):
16.02.2014 02:12
В каком случае стоит использовать syscalls, а когда стоит прибегнуть к glibc?
Вопрос явно с подвохом и вызвает недоумение. Нужна привязка к ядру - используй системные вызовы. Нужна привязка к переносимому слою - используй библиотеку C.

Ну это-то понятно :) Дело в том, что никто и не скажет перед началом проекта, к чему именно нужна привязка. Что выбирам по умолчанию? Что универсальней и почему?
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Системные вызовы или библиотечные функции?

Сообщение NickLion »

Универсальней стандартная библиотека C, затем POSIX. По определению, поскольку не имеет проблем среди всех POSIX совместимых систем. Зачастую и с Windows проблем нет (там POSIX частично).

И почему именно glibc? — это лишь одна из таких библиотек.

А всякие syscall имеет смысл тогда, когда не хватает функциональности. Можно заиметь проблемы то с ARM, то с различиями Linux/FreeBSD/OSX/...
Спасибо сказали: