netlink 用戶層部分代碼如下:
#include <linux/netlink.h>
#include <sys/socket.h>
int main()
{
struct sockaddr_nl src_addr;
src_addr.nl_family = AF_NETLINK;
src_addr.nl_pid = getpid();
src_addr.nl_groups = 0;
return 0;
}
這已經是個完整的程序了,gcc 編譯出現如下錯誤:
# gcc ccc.c
In file included from ccc.c:1:
/usr/include/linux/netlink.h:35: error: expected specifier-qualifier-list before ‘sa_family_t’
ccc.c: In function ‘main’:
ccc.c:9: error: ‘struct sockaddr_nl’ has no member named ‘nl_family’
ccc.c:10: error: ‘struct sockaddr_nl’ has no member named ‘nl_pid’
ccc.c:11: error: ‘struct sockaddr_nl’ has no member named ‘nl_groups’
爲什麼呢 ?
當然,並不是如錯誤提示那樣 struct sockaddr_nl 沒有 nl_family 成員, 問題在頭文件 include 先後順序上 !
#include <linux/netlink.h>不能放在 #include <sys/socket.h> 前面