Sometimes I see header files of the form.
#include <sys/sysinfo.h> // I found this on my system under /usr/include/sys/sysinfo.h. Is that all the "sys/" means?
What is this called and why are these header files different from most others like
#include <stdio.h>
Maybe a group of related header files been grouped under the label of ‘sys’, but if I try something like “man pci” (there’s a pci.h header in /usr/include/sys/ there is no entry.
It is a convenient way of providing some ‘namespace structure’ to header files. In the Unix world, the main division is between headers like
<stdio.h>which are often fairly general and primarily for use by user programs and not primarily for use by the operating system kernel. By contrast, the headers like<sys/sysinfo.h>or<sys/types.h>were intended for use when compiling the kernel – they were more system-y.Nowadays, it provides a way to separate your project’s headers from another project’s headers. For example,
<openssl/ssl.h>identifies the header as belonging to the OpenSSL code base.I don’t know that there is a particular name for this style of specifying headers.
Note that if the OpenSSL headers are stored in the directory
/usr/local/include/openssl, then you specify-I /usr/local/includeon the compiler command line. What actually happens is that the header is looked for by prefixing the name in the angle brackets by one of a number of standard directories, of which the default one is/usr/includeon Unix. Therefore,<stdio.h>is found in/usr/include/stdio.hand<sys/sysinfo.h>is found in/usr/include/sys/sysinfo.h, etc.