Семантика S_IRUSR в POSIX - PullRequest
       7

Семантика S_IRUSR в POSIX

6 голосов
/ 26 января 2010

Я изучаю POSIX API и не понимаю логики некоторых имен.

например. S_IRUSR, S_IRUSR

Что означает S? Я понимаю, что R и W предназначены для чтения и записи. Но какое соглашение об именах следует за POSIX? Так же, как Win32 следует Венгерская нотация для именования, что POSIX следует для их именования? Для таких стандартов, как POSIX, для этого должна быть документация ...

Ответы [ 3 ]

8 голосов
/ 26 января 2010

Я не уверен, имеют ли они какое-либо значение, кроме того, что они находятся в sys/stat.h, поэтому S может обозначать "stat".

Я пытался выполнить какую-то детективную работу, например, запись IEEE Std 1003.1, 2004 г. выпуска для sys/stat.h гласит: Впервые выпущено в выпуске 1. Получено из выпуска 1 SVID .

Затем Спецификации разработчика для двоичного интерфейса приложения System V (см. Том 1a [pdf]), стр. 95, и даже с именами, начинающимися с S_. Я не смог пойти дальше, чем это.

О вашем общем вопросе: большая часть истории. Например, creat() в POSIX, но имя происходит из истории . Многие из имен функций POSIX (и их поведение) происходят из стандарта C. На самом деле их описание обычно имеет текст , например :

Функциональные возможности, описанные на этой справочной странице, соответствуют стандарту ISO C. Любой конфликт между требованиями, описанными здесь, и стандартом ISO C является непреднамеренным. Этот том IEEE Std 1003.1-2001 соответствует стандарту ISO C.

Я думаю, что единственный способ найти какую-либо логику за POSIX API - это прочитать историю Unix.

Может помочь следующее:

3 голосов
/ 11 февраля 2010

Ведущий S_ просто указывает, с какой структурой / функцией работает константа.

Начиная с <sys/stat.h>, константы S_IRUSR, S_IWUSR и т. Д. Являются возможными значениями для члена st_mode для struct stat (используется в stat() и у друзей). Все члены struct stat начинаются с префикса st_, и есть несколько stat связанных макросов, которые также начинаются с S_. Существует соглашение, упрощающее сопоставление имен структур, имен элементов и констант.

1 голос
/ 26 января 2010

Алок верен. См. спецификацию для sys / stat.h . Если бы вы написали свою собственную реализацию stat () / statvfs () (очень часто в портах, которые заставляют не-posix-программы работать на хостах POSIX), вы бы поставили перед ней префикс с чем-то другим, например, Z_IRUSR.

Хотя у меня нет удобного списка, я вполне уверен, что некоторые реализации на C предоставляют несколько вариантов для sys / stat, S_ дает вам типичное поведение POSIX и (X) дает вам что-то еще. Впрочем, я давно этого не видел, поэтому не могу вспомнить, где столкнулся с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...