开发者

#include statements that include a slash (header files made up of two parts)

开发者 https://www.devze.com 2022-12-23 01:28 出处:网络
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?

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 di开发者_开发知识库fferent 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/include on 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/include on Unix. Therefore, <stdio.h> is found in /usr/include/stdio.h and <sys/sysinfo.h> is found in /usr/include/sys/sysinfo.h, etc.


They're still headers, but they're not directly in the default search paths. This is often done for headers from third-party libraries, to keep them separate from the stock libc headers.


It has to do with how your preprocessor works. If your preprocessor looks in /usr/include/ then you need sys/sysinfo.h. If your preprocessor looks in /usr/include/sys/ then you only need sysinfo.h

Try playing around with gcc with the -I and -l options

edit: those should be capital i and lowercase L

0

精彩评论

暂无评论...
验证码 换一张
取 消