Почему системному вызову Linux Open не нужен параметр размера буфера для пути? - PullRequest
0 голосов
/ 20 марта 2019

Почему системный вызов open не нуждается в параметре размера буфера, как системный вызов write?

Как эти два системных вызова по-разному обрабатывают свои строковые параметры?

Принимает ли системный вызов open строку с нулем в конце для параметра пути, а системный вызов write - нет? Если так, то почему несоответствие?

Почему бы не сделать, чтобы все (или ни один) системные вызовы, использующие строки / массивы, требовали параметра размера?

1 Ответ

2 голосов
/ 20 марта 2019

UNIX был разработан как операционная система для программ, написанных на ассемблере, позже для программ, написанных на C. В соглашении об ассемблере, который использует команда UNIX, а позднее в C, строки заканчиваются байтами NUL.Таким образом, вполне естественно использовать одно и то же соглашение при общении с операционной системой.Линус копировал UNIX API при разработке Linux, поэтому он имеет такой же дизайн.Функциональные возможности не теряются при завершении строк с NUL, поскольку байты NUL не могут появляться в путях или других идентификаторах.

Вызов write записывает произвольные двоичные данные в файл.Эти данные не обязательно являются текстовыми, поэтому использование строкового соглашения не имеет особого смысла.

...