getifaddrs导致Segmentation fault
来源:互联网 发布:淘宝店进货渠道 编辑:程序博客网 时间:2024/05/22 09:22
想获取所有网卡的IP地址,但是遇到比如pppd拨号时候,网卡会是pp0,就会出现类似内存操作错误Segmentation fault,搜索谷歌,发现原因可能是At the moment it finds PPP interfaces, but does not return the destination address.就是说,如果找到的是PPP设备,返回的地址就可能为空,这样继续打印对应的IP地址就会出错。
kill掉pppd进程以后,再运行获取IP地址,就正常了,貌似是个bug,但是如何解决呢?
基本代码如下:
#include <stdlib.h>#include <string.h>#include <stdio.h>#include <arpa/inet.h>#include <sys/socket.h>#include <netdb.h>#include <ifaddrs.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <linux/if_link.h>#define INET_ADDRSTRLEN 16#define INET6_ADDRSTRLEN 46int main(void){struct ifaddrs * ifAddrStruct=NULL;struct ifaddrs * ifa=NULL;int ret=0;ret=getifaddrs(&ifAddrStruct);printf("End getifaddrs %d\n",ret);printf("Following IP addresses are available:\n\n");for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next){printf("Entry for ifa=%08x\n",ifa);if (ifa ->ifa_addr->sa_family==AF_INET){ // check it is IP4printf("ACTG: ipv4\n");void * tmpAddrPtr=NULL;// is a valid IP4 AddresstmpAddrPtr=&((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;char addressBuffer[INET_ADDRSTRLEN];inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);printf(" IPv4: interface: %s\t IP Address %s\n", ifa->ifa_name, addressBuffer);}else if (ifa->ifa_addr->sa_family==AF_INET6){ // check it is IP6printf("ACTG: ipv6\n");// is a valid IP6 Addresschar addressBuffer[INET6_ADDRSTRLEN];inet_ntop(AF_INET6, (void*)&((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr, addressBuffer, INET6_ADDRSTRLEN);printf(" IPv6: interface: %s\t IP Address %s\n", ifa->ifa_name, addressBuffer);}printf("Leave for ifa=%08x\n",ifa);}if (ifAddrStruct!=NULL) freeifaddrs(ifAddrStruct);return 0;}
0 0
- getifaddrs导致Segmentation fault
- pthread_jion() , pthread_create() 导致的segmentation fault
- fgets,优先级问题导致Segmentation fault
- Segmentation Fault
- Segmentation Fault
- Segmentation fault
- SEGMENTATION FAULT
- Segmentation fault
- segmentation fault
- segmentation fault
- segmentation fault
- segmentation fault
- segmentation fault
- segmentation fault
- segmentation fault
- Segmentation fault
- segmentation fault
- segmentation fault
- 找不到scalameter 利用intellij scala 导入jar 添加resource
- 数据结构与算法分析笔记与总结(java实现)--二叉树14:把二叉树打印成多行
- 关于WindowManager.LayoutParams.TYPE_SYSTEM_ALERT适配的问题
- 深入分析python yield
- 用ajax实现文件下载
- getifaddrs导致Segmentation fault
- 数据结构与算法分析笔记与总结(java实现)--二叉树15:对称的二叉树
- jforum用到MySQL设置字符集为UTF8(Windows版)解决中文乱码
- 实现一键下载安装
- POJ1009_Edge Detection_跳跃式编码
- 即时定位与地图构建(SLAM)与基于视觉的SLAM(VSLAM)
- 递归的应用(二)
- web App 移动开发之ionic开发环境部署
- 数据结构与算法分析笔记与总结(java实现)--二叉树16:从上往下打印二叉树