Где находится справочная страница программиста для открытой функции C?


16

Я использую debian8 (Джесси), и я пошел, чтобы найти читать справочную страницу для open. вместо этого я получил предупреждение:

$ man 3 open
No manual entry for open in section 3
See 'man 7 undocumented' for help when manual pages are not available.

У меня установлен пакет manpage-dev, так где же находится справочная страница программистов (man 3) для открытия?


1
Вы также можете использовать apropos, или man --names-onlyс одним из --regexили --wildcard. См man man.
CVn

В Си openэто не функция, это системный вызов. Это педантичное различие, но здесь
уместно,

Ответы:


18

Вы хотите man 2 openдля интерфейса библиотеки C, а не man 3 open. Это действительно в manpages-dev(не manpage-dev). man 3 openдает страницу руководства по Perl.

# Show the corresponding source groff file
man -w 2 open   
/usr/share/man/man2/open.2.gz

# Show which package this file belongs to
dpkg -S /usr/share/man/man2/open.2.gz
manpages-dev: /usr/share/man/man2/open.2.gz

# Or use dlocate to show which package this file belongs to
dlocate /usr/share/man/man2/open.2.gz
manpages-dev: /usr/share/man/man2/open.2.gz

14

Разделы руководства описаны на самих страницах руководства. Войдите man manв сеанс оболочки, чтобы увидеть различные разделы и общий контент:

   1   Executable programs or shell commands
   2   System calls (functions provided by the kernel)
   3   Library calls (functions within program libraries)
   4   Special files (usually found in /dev)
   5   File formats and conventions eg /etc/passwd
   6   Games
   7   Miscellaneous  (including  macro  packages  and  conventions), e.g.
       man(7), groff(7)
   8   System administration commands (usually only for root)
   9   Kernel routines [Non standard]

Раздел 2 описывает системные вызовы, где раздел 3 охватывает процедуры библиотеки. Библиотечные процедуры, которые являются просто оболочками для системных вызовов, также описаны в разделе 2.


10

Просто чтобы прояснить причину этого, man-страница находится в разделе 2, потому что это системный вызов (реализованный более или менее непосредственно как часть ядра, а не библиотеки C).

Это различие может показаться несколько произвольным, особенно с более старыми системными вызовами, которые теперь являются библиотечными функциями (fork все еще находится в разделе 2, даже если это оболочка для клона), если вы уже не знаете этого. В общем, сначала посмотрите раздел 3, затем попробуйте раздел 2, если вы не можете его найти или, похоже, он не имеет отношения к делу. Кроме того, некоторые функции в разделе 2 являются внутренними или устаревшими специфичными для Linux функциями, которые не должны вызываться обычными программами (например, getdents, gettid).

Вы также можете установить пакет manpages-posix-dev, чтобы получить набор manpages, который написан с переносной точки зрения, а не содержит информацию, специфичную для linux. В этом пакете все справочные страницы, предоставляемые для функций C, находятся в разделе 3p.


4

Когда я не уверен, в каком разделе находится определенная страница man, я использую опцию -a.

   -a, --all
          By  default,  man  will  exit  after  displaying the most suitable manual page it finds.
          Using this option forces man to display all the manual pages with names that  match  the
          search criteria.

Из примера в man-странице для человека:

   man -a intro
       Display,  in  succession, all of the available intro manual pages
       contained within the manual.  It is possible to quit between
       successive displays or skip any of them.

3

В этой ситуации полезно просмотреть весь список всех доступных страниц с этим именем man-страницы, используя одну из команд:

$ man -k ^open$
$ apropos -r ^open$
$ man -f open
$ whatis open

Результат будет таким же:

open (1)             - start a program on a new virtual terminal (VT).
open (2)             - open and possibly create a file or device

Или просмотрите содержимое всех существующих man-страниц и, таким образом, определите необходимые:

$ man -a open
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.