Заголовки linux/*.h
действительно предназначались для внутреннего использования в ядре, и если бы Linux создавался сегодня, эти файлы даже не существовали бы под /usr/include
. Но на ранних этапах многие пользовательские пространства libc (в то время libc4 и libc5) полагались на заголовки Linux для определения типов, констант, структур и т. Д. Для использования в пользовательском пространстве, поэтому netinet/in.h
содержал только #include <linux/in.h>
или аналогичный, и прекрасная традиция началась. Сегодня единственными заголовками в дереве linux
, которые следует использовать для приложений пользовательского пространства, являются некоторые вещи, связанные с поддержкой определенного оборудования на низком уровне, например консоли Linux, framebuffer, video4linux и т. Д.
Короче говоря, вы должны использовать netinet/in.h
(стандартный заголовок, указанный в POSIX) и делать вид, что вы никогда не видели linux/in.h
. : -)