TIL: Number in man page titles (e.g. sleep(3))

If you do Linux systems programming, you will have likely pored over man pages, either on the command line or, my personal preference, using the excellent man7.org or linux.die.net. I’ve always seen the numbers in sleep(3) and read(2) and idly wondered what they meant, but never actually bothered to look them up.

That is, until a review comment on a pull request:

// Behaves like man 2 basename

reviewer: nit: it’s not a syscall, so “man 2” is incorrect

So I looked it up. The answer was in the man(1) page (also accessible via the delightful man man command):

The table below shows the section numbers of the manual followed by the types of pages they contain.

  1   Executable programs or shell commands
  2   System calls (functions provided by the kernel)
  3   Library calls (functions within program libraries)
  (... less common section numbers)

So my colleague was right and the code should have read // behaves like man 3 basename as basename(3) is a libc library call.

And there’s more to these numbers than what the man man page describes: various letters can also be attached as suffixes to the numbers. For example, p indicates a POSIX man page like with free(3p) and x indicates X documentation like with ncurses(3x).

It’s embarrassing to admit I’ve been using man pages for years but only learned this today.

If you enjoyed this post, you can subscribe to my weekly roundup of recent posts, or follow via RSS.