Что такое syscall, sys_open или open? - PullRequest
1 голос
/ 04 апреля 2011

Я думаю sys_open - это канонический системный вызов,

то есть с префиксом sys_.

но strace, который должен регистрировать все системные вызовы, выводит open как системный вызов (не префиксная версия), и я запутался ...

Какой из них вообще системный? ?? 1011 *

Ответы [ 2 ]

2 голосов
/ 04 апреля 2011

Цитирование Брайана У. Кернигана и Роба Пайка из «Среды программирования UNIX», стр. 44:

Программы извлекают данные из файла с помощью системного вызова (подпрограмма в ядре) с именем read.

Системный вызов называется read, и, чтобы упростить задачу для программиста, соответствующая функция из стандартной библиотеки C имеет то же имя.

Имя sys_read, с другой стороны, интересно только нескольким людям, а именно тем, кто взламывает ядро. Его название просто считается деталью реализации операционной системы.

1 голос
/ 04 апреля 2011

Я предполагаю, что вы говорите здесь о C или C ++. Ни sys_open(), ни open() ни один из соответствующих языковых стандартов не предписывает быть "системным вызовом". Однако в большинстве (всех?) * NIX (включая Linux, Mac OS X, BSD и т. Д.) open() является системным вызовом.

Насколько мне известно, sys_open() уникален для Linux и реализован в виде слоя поверх open().

...