东莞网站建设 服饰湖北自适应网站建设价格

web/2025/9/30 20:55:05/文章来源:
东莞网站建设 服饰,湖北自适应网站建设价格,wordpress排版问题,网页制作工作描述在进行 Linux 网络编程时#xff0c;经常会需要获取本机 IP 地址#xff0c;除了常规的读取配置文件外#xff0c;本文罗列几种个人所知的编程常用方法#xff0c;仅供参考#xff0c;如有错误请指出。 方法一#xff1a;使用 ioctl() 获取本地 IP 地址 Linux 下可以使用…  在进行 Linux 网络编程时经常会需要获取本机 IP 地址除了常规的读取配置文件外本文罗列几种个人所知的编程常用方法仅供参考如有错误请指出。 方法一使用 ioctl() 获取本地 IP 地址 Linux 下可以使用 ioctl() 函数以及结构体 struct ifreq 和结构体struct ifconf 来获取网络接口的各种信息。具体过程是先通过 ictol 获取本地所有接口的信息保存到 ifconf 结构中再从其中取出每个 ifreq 表示的接口信息。 如果本机的 IP 地址绑定在第一块网卡上则只需指定网卡名称无需获取所有网卡的信息即可获取见如下函数 int get_localip(const char * eth_name, char *local_ip_addr) {int ret -1;register int fd;struct ifreq ifr;if (local_ip_addr NULL || eth_name NULL){return ret;}if ((fdsocket(AF_INET, SOCK_DGRAM, 0)) 0){strcpy(ifr.ifr_name, eth_name);if (!(ioctl(fd, SIOCGIFADDR, ifr))){ret 0;strcpy(local_ip_addr, inet_ntoa(((struct sockaddr_in *)ifr.ifr_addr)-sin_addr));}}if (fd 0){close(fd);}return ret; }如果想通过获取所有网络接口信息示例代码如下 #include stdio.h #include net/if.h #include string.h #include unistd.h #include arpa/inet.h #include sys/ioctl.h #include netinet/in.hint get_localip(const char * eth_name, char *local_ip_addr) {int ret -1;register int fd, intrface;struct ifreq ifr[32];struct ifconf ifc;if (local_ip_addr NULL || eth_name NULL){return ret;}if ((fdsocket(AF_INET, SOCK_DGRAM, 0)) 0){ifc.ifc_len sizeof ifr;ifc.ifc_buf (caddr_t)ifr;if (!ioctl(fd, SIOCGIFCONF, (char*)ifc)) //获取所有接口信息{intrface ifc.ifc_len / sizeof(struct ifreq);while (intrface-- 0){//Get IP Addressif (!(ioctl(fd, SIOCGIFADDR, (char*)ifr[intrface]))){if(strcmp(eth_name, ifr[intrface].ifr_name) 0){ret 0;sprintf(local_ip_addr, %s, inet_ntoa(((struct sockaddr_in*)(ifr[intrface].ifr_addr))-sin_addr));break;}}}}}if (fd 0){close(fd);}return ret; }int main(int argc, const char **argv) {int ret;char local_ip[20] {0};ret get_localip(eth0, local_ip);if (ret 0){printf(local ip:%s\n, local_ip);}else{printf(get local ip failure\n);}return 0; }方法二getsockname() 获取本地 IP 地址 getsockname()用于获取一个已捆绑或已连接套接字的本地地址。若一个套接字与 INADDR_ANY 捆绑也就是说该套接字可以用任意主机的地址此时除非调用 connect() 或 accept() 来连接否则 getsockname() 将不会返回主机 IP 地址的任何信息。 示例代码 #include stdio.h #include errno.h #include string.h #include unistd.h #include arpa/inet.h #include sys/socket.h #include netinet/in.h#define PORT 80 #define SERVER_IP 192.168.10.31int main(int argc, const char **argv) {int ret -1;socklen_t len;char buf[30] {0};struct sockaddr_in server_addr, local_addr;int fd socket(AF_INET, SOCK_STREAM, 0);//int fd socket(AF_INET, SOCK_DGRAM, 0);if (fd 0){printf(fail to creat socket\n);return -1;}memset(server_addr, 0, sizeof(server_addr));server_addr.sin_family AF_INET;server_addr.sin_port htons(PORT);server_addr.sin_addr.s_addr inet_addr(SERVER_IP);if(connect(fd, (struct sockaddr*)server_addr, sizeof(server_addr))0){printf(connect error!!!\n);goto end;}len sizeof(local_addr);memset(local_addr, 0, sizeof(local_addr));ret getsockname(fd, (struct sockaddr*)local_addr, len);if (ret 0){printf(local ip is %s, local port is %d\n, inet_ntop(AF_INET, local_addr.sin_addr, buf, sizeof(buf)), ntohs(local_addr.sin_port));}else{printf(getsockname failed, error%d\n, errno);}end:if (fd){close(fd);}return ret; }方法三getaddrinfo() 获取本地 IP 地址 getaddrinfo() 可以完成网络主机中主机名和服务名到地址的映射但是一般不能用来获取本地 IP 地址当它用来获取本地 IP 地址时返回的一般是 127.0.0.1 本地回环地址且该函数仅仅支持 IPv4。 示例代码 #include netdb.h #include stdio.h #include unistd.h #include arpa/inet.h// 获取本地IP时一般都是127.0.0.1 int main(int argc, const char **argv) {int ret;char host_name[128] {0};struct addrinfo *res, *cur;struct sockaddr_in *addr;if (gethostname(host_name, sizeof(host_name)) 0){printf(gethostname error\n);return -1;}ret getaddrinfo(host_name, NULL, NULL, res);if (ret ! 0){printf(Error: error in getaddrinfo on hostname: %s\n, gai_strerror(ret));return -1;}for(cur res; cur ! NULL; cur cur-ai_next){if(cur-ai_family AF_INET){addr (struct sockaddr_in*)cur-ai_addr;printf(local ip:%s\n, inet_ntoa(addr-sin_addr));}//char host[1024] {0};//ret getnameinfo(cur-ai_addr, cur-ai_addrlen, host, sizeof(host), NULL, 0, NI_NUMERICHOST);//if(ret ! 0)//{// printf(getnameinfo: %s\n, gai_strerror(ret));//}//else//{// printf(ip: %s\n, host);//}}freeaddrinfo(res);return 0; }方法四gethostbyname() 获取本地 IP 地址 gethostbyname() 和 getaddrinfo() 的功能类似一般用于通过主机名或者服务名比如域名来获取主机的 IP 地址。但是要想获取本地 IP 地址的时候一般获取的是回环地址 127.0.0.1。 示例代码 #include netdb.h #include stdio.h #include unistd.h #include arpa/inet.h// 获取本地IP时一般都是127.0.0.1 int main(int argc, const char **argv) {int i 0;char host_name[128] {0};struct hostent *hptr;if (gethostname(host_name, sizeof(host_name)) 0){printf(gethostname error\n);return -1;}if ((hptrgethostbyname(host_name)) NULL){printf(gethostbyname error\n);return -1;}while(hptr-h_addr_list[i] ! NULL){printf(hostname: %s\n, hptr-h_name);printf( ip: %s\n, inet_ntoa(*(struct in_addr*)hptr-h_addr_list[i]));i;}return 0; }方法五通过 getifaddrs() 获取本地 IP 地址 代码来自StackOverflow:http://stackoverflow.com/questions/212528/linux-c-get-the-ip-address-of-local-computer 这里解释一下代码中的 INET_ADDRSTRLEN 和 INET6_ADDRSTRLEN 该宏变量是定义在 netinet/in.h 头文件中 // FILE: netinet/in.h#define INET_ADDRSTRLEN 16 /* for IPv4 dotted-decimal */#define INET6_ADDRSTRLEN 46 /* for IPv6 hex string */示例代码 #include stdio.h #include sys/types.h #include ifaddrs.h #include netinet/in.h #include string.h #include arpa/inet.hint main (int argc, const char * argv[]) {struct ifaddrs * ifAddrStructNULL;struct ifaddrs * ifaNULL;void * tmpAddrPtrNULL;getifaddrs(ifAddrStruct);for (ifa ifAddrStruct; ifa ! NULL; ifa ifa-ifa_next){if (!ifa-ifa_addr){continue;}if (ifa-ifa_addr-sa_family AF_INET) // check it is IP4{// 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(%s IP Address %s\n, ifa-ifa_name, addressBuffer);}else if (ifa-ifa_addr-sa_family AF_INET6) // check it is IP6{// is a valid IP6 AddresstmpAddrPtr((struct sockaddr_in6 *)ifa-ifa_addr)-sin6_addr;char addressBuffer[INET6_ADDRSTRLEN];inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN);printf(%s IP Address %s\n, ifa-ifa_name, addressBuffer);}}if (ifAddrStruct!NULL){freeifaddrs(ifAddrStruct);}return 0; }方法六通过 popen() 调用 ifconfig 获取本地 IP 地址 用popen() 建立一个管道管道的一端执行命令 ifconfig管道的另一端读取收到的数据并进行相应的解析。这种方法需要执行 shell 命令配合正则表达式效率较低一般不采用。而这种方式其实更倾向于配置原因就是使用简单。 示例代码 #include stdio.h #include stdlib.h#define ETH_NAME ens33int main(int argc, const char *argv[]) {FILE *fp;char buf[256] {0};char command[256] {0};//char *fmt ifconfig %s|sed -n 2p|sed -n s#^.*dr:##gp|sed -n s#B.*$##gp;char *fmt ifconfig %s|grep inet addr|awk { print $2} | awk -F: {print $2};snprintf(command, sizeof(command), fmt, ETH_NAME);if((fp popen(command, r)) NULL){perror(Fail to popen\n);return -1;}while(fgets(buf, sizeof(buf), fp) ! NULL){printf(%s, buf);}pclose(fp);return 0; }参考文章 [1] https://blog.csdn.net/bailyzheng/article/details/7489656 [2] https://blog.csdn.net/k346k346/article/details/48231933 [3] https://blog.csdn.net/zhongmushu/article/details/89944990

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

郑州外贸网站推广县 两学一做网站

身体:安全和身体最重要了,这个才是真正的本钱 刷反思:遇到的各种心理问题和心态的问题都可以去刷反思 悟透:所有错误的抉择(所有的挣扎)都是因为没想明白,没领悟透。 人生无大事:重在坚持,重…

网站模块制作ppt教程视频自学

一、ES 场景:某头部互联⽹公司的好房业务,双⼗⼀前⼀天,维护楼盘的运营⼈员突然接到合作开发商的通知,需要上线⼀批热⻔的楼盘列表,上传完成后,C端⼩程序⽀持按楼盘的名称、户型、⾯积等产品属性全模糊搜索…

做网站seo制作外贸网站模板下载

#Android ##Android基础及相关机制 Android Context 上下文 你必须知道的一切 Android中子线程真的不能更新UI吗? Android基础和运行机制 Android任务和返回栈完全解析,细数那些你所不知道的细节 【凯子哥带你学Framework】Activity启动过程全解析 【凯子…

阿里云网站建设教程龙岩天宫山缆车多少钱

本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:3D Face Reconstruction in Deep Learning Era: A Survey 链接:3D Face Reconstruction in Deep Learning Era: A Survey - PubMed (nih.gov) 摘要 随着深度学习的出现和图形…

平台网站建设方案苏州市建设局网站

一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,Rabbit…

做网站推广如何最新军事动态

六月一眨眼的时间就来到了中旬,时间流逝之快让我们有些措手不及,炎热的天气更是加剧了小组里每个人的焦虑,也因此有了更大的动力与决心去完成自己的工作。 自己的工作是这个游戏的前端,需要完成的任务是做出来登录等一系列的用户界…

做微信平台网站网站的几种提交方式

1、卷积神经网络的手写数字旋转角度预测原理及流程 基于卷积神经网络的手写数字旋转角度预测是一个常见的计算机视觉问题。在这种情况下,我们可以通过构建一个卷积神经网络(Convolutional Neural Network,CNN)来实现该任务。以下…

电子产品网站建设策划方案好用的快速网站建设平台

我们传统使用MinIo做OSS对象存储的应用方式往往都是在后端配置与MinIO的连接和文件上传下载的相关接口,然后我们在前端调用这些接口完成文件的上传下载机制,但是,当并发量过大,频繁访问会对后端的并发往往会对服务器造成极大的压力…

中企网络科技建站天眼查企业工商查询

高级计算机体系结构-浙江大学计算机系统结构室高级计算机体系结构陈文智 浙江大学计算机学院chenwzzju.edu.cn2014年9月11.1 计算机技术发展综述(1)1946年: 在二次世界大战期间研制成功的世界上第一台电子计算机ENIAC(Electronic Numerical Intergrator andCalculator)正式对…

网站开通flash企查查企业信息查询网页版

树-二叉树、满二叉树和完全二叉树 二叉树的定义: (1)当n0时,为空树; (2)当n>0时,是由一个根结点和称为根结点的左、右子树构成,并且两颗子树互不相交。 满二叉树&…

彩票走势图网站建设网站建设服务外包

文件夹和文件的作用 config:文件的配置: 1.coco.data:存放coco数据集的相关信息,如类别总数,数据集的路径等 2.yolov3.cfg: yolov3的网络架构 data:存放训练集和测试集 1.coco:存放coco训练集和测试集 labels中存放每个照片的标签…

济宁500元网站建设企业app怎么做

👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误…

网站优化seo方案电子商务网站的目的

给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。 上图子矩阵左上角 (row1, col1) (2, 1) ,右下角(row2, col2) (4, 3),该子矩形内元素的总和为 8。 示…

做logo图标的网站建设一个图片下载网站

im2double函数,如果输入是 uint8 unit16 或者是二值的logical类型,则函数im2double 将其值归一化到0~1之间。

建手机网站怎么收费中国网站建设公司有哪些方面

发现有一个怪圈,如果码农年龄35+,除非非常匹配,不然在国内企业筛选可能就筛选不过。国外码农可以干到40+、50+。一些外企,对年龄35+的码农依然青睐。这些外企对英文是有要求,通常是要英文自我介绍,下面提供一些英文自我介绍参考。 参考1: Good morning/afternoon, I a…

网站安全设置教程广告软文

气膜建筑在近年来的发展迅速,逐渐替代了一部分传统建筑,展现了良好的市场前景。然而,面对自然环境中的极端天气,如暴风、暴雨和暴雪,气膜建筑是否能够经受住考验是大家关注的焦点。轻空间带您探讨一下这些极端天气对气…

网站友情链接形式上国外网站用什么机箱好

Jenkins 中的清理工作空间 是指在构建完成后,自动删除工作空间中的某些或所有文件,以释放磁盘空间、提高构建效率并确保构建环境的清洁。 清理工作空间的必要性 释放磁盘空间: 随着构建次数的增加,工作空间中的文件会不断累积&…

书店网站建设策划书总结做美剧盗版网站

继续学习最近一直在使用Asp.Net Core SignalR(下面成SignalR Core)为小程序提供websocket支持,前端时间也发了一个学习笔记,在使用过程中稍微看了下它的源码,不得不说微软现在真的强大,很多事情都帮你考虑到了,比如使用Redis,使用Redis后,你的websocket就支持横向扩…

网站开发毕业设计评审表wordpress 优秀作者

一.定时器(timer)的需求 1.执行定时任务的时,主线程不阻塞,所以timer必须至少持有一个线程用于执行定时任务 2.考虑到timer线程资源的合理利用,一个timer需要能够管理多个定时任务,所以timer要支持增删任务…

如何在asp网站甘肃城乡建设厅网站首页

学习感悟一己之言 学习上克服困难实际上是克服心理上或认识上的障碍的过程。所谓的理解,就是化陌生为熟悉。看不懂,一方面是因为接触的材料太陌生,即远离你当前的背景知识;另一方面是材料或讲述者的描述刻画不准确或晦涩不当。有了…