问题背景:
看 https://www.cnblogs.com/sinaxyz/p/4525208.html 这个篇blog时候,发现在应用层代码中,函数 int open_netlink() 中,有这么一句:
int open_netlink() { /*...*/ struct sockaddr_nl addr; memset((void *)&addr, 0, sizeof(addr)); /*...*/ addr.nl_pid = getpid() /*...*/ }
通过查询,发现:
struct sockaddr_nl { __kernel_sa_famiy_t nl_family; unsigned short nl_pad; __u32 nl_pid; //无符号整型 __u32 nl_groups; };
pid_t getpid(void); //pid是int类型
解决方案:
随便写的demo示例,隐式类型转换时候不报warning,加上选项 -Wconversion 就好了。
gcc -O2 -Wall -Wconversion test.c -o test