热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

多线程解析域名-一方有

这是我参加比赛得到的题目开发一个域名批量查询程序,文本文件data.txt中存储着N个域名,每行一个,要求程序从该文件中读取域名数据,然后获取该域名对应的IP地址列表.比如文件内容为:www.126.comwww.132321321.comwww.baidu.com输出格式为:域名IP

这是我参加比赛得到的题目

 

  1. 开发一个域名批量查询程序,文本文件data.txt中存储着N个域名,每行一个,  
  2. 要求程序从该文件中读取域名数据,然后获取该域名对应的IP地址列表.比如  
  3. 文件内容为:  
  4. www.126.com  
  5. www.132321321.com  
  6. www.baidu.com  
  7. 输出格式为:  
  8. 域名  
  9. IP个数  
  10. IP1  
  11. IP2  
  12. ...  
  13. 例如,上面的例子文件中的输出结果为:  
  14. www.126.com  
  15. 1  
  16. 121.20.3.105  
  17. www.132321321.com  
  18. 0  
  19. www.baidu.com  
  20. 3  
  21. 212.32.4.211  
  22. 10.52.32.32  
  23. 102.31.0.91 
为了加快查询速度我采取了多线程(最大线程数通过参数控制)的方法,下面是我设计的程序流程(以3个线程为例):

 

 

下面是我设计保存结果的,由于我用的是多线程,因此用链表保存,这样不会出现线程之间同时修改同一个变量的问题,这样不需要加上锁,只需要把链表指针传入,我设计的链表是一个链表上的各个节点又各自保存另一个链表(保存每个域名的多个ip)

 

 

源代码:

 

  1. /*  
  2.  * 系统环境:Linux kernel 2.6.18 gcc 4.1.2 pthread,dns服务器使用/etc/resolv.conf的配置  
  3.  * 编译: gcc test1.c -o test1 -lpthread  
  4.     输入参数:  
  5.                参数1:数据文件路径,必须  
  6.                参数2:线程数,不输入则默认为4,最小值为1  
  7.  * 运行: ./test1 datafilename <max thread num> 默认线程数为4  
  8.  * 例子: ./test1 d.txt  
  9.  * 例子: ./test1 d.txt 3   
  10.  * ----------------------------------------------------------------------------------------------------  
  11.  * Copyright (c) 2010 by yifangyou   
  12.  * All rights reserved  
  13.  * ----------------------------------------------------------------------------------------------------  
  14.  * 开发一个域名批量查询程序,文本文件data.txt中存储着N个域名,每行一个,  
  15.  * 要求程序从该文件中读取域名数据,然后获取该域名对应的IP地址列表.比如  
  16.  * 文件内容为:  
  17.  * www.126.com  
  18.  * www.132321321.com  
  19.  * www.baidu.com  
  20.  * 输出格式为:  
  21.  * 域名  
  22.  * IP个数  
  23.  * IP1  
  24.  * IP2  
  25.  * ...  
  26.  * 例如,上面的例子文件中的输出结果为:  
  27.  *   
  28.  * www.126.com  
  29.  * 1  
  30.  * 121.20.3.105  
  31.  * www.132321321.com  
  32.  * 0  
  33.  * www.baidu.com  
  34.  * 3  
  35.  * 212.32.4.211  
  36.  * 10.52.32.32  
  37.  * 102.31.0.91  
  38.  *----------------------------------------------------------------------------------------------------  
  39.  * 本程序的数据结构是  
  40.  * query_list_head  
  41.  * ->query_list1---------------------------->query_list2-------------------->query_list3  
  42.  *                      ->domain1 ->domain  
  43.  *                      ip_num1 ip_num  
  44.  *                      host_list_head host_list_head  
  45.  *                      ->ip1->ip2->ip3 ->ip2_1->ip2_2->ip2_3  
  46.  */  
  47.    
  48. #include  /* for printf */   
  49. #include  /* for malloc */  
  50. #include tring.h> /* for strlen,strdup */  
  51. #include  /* for inet_ntoa */  
  52. #include  /* for inet_ntoa */  
  53. #include in.h> /* for inet_ntoa */  
  54. #include  /* for inet_ntoa */  
  55. #include  /* for gethostbyname */  
  56. #include  /* for pthread_create,pthread_join*/  
  57. #include ddef.h> /* 
推荐阅读
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 在将Web服务器和MySQL服务器分离的情况下,是否需要在Web服务器上安装MySQL?如果安装了MySQL,如何解决PHP连接MySQL服务器时出现的连接失败问题? ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • Linux下MySQL 8.0.28安装指南
    本文详细介绍了在Linux系统上安装MySQL 8.0.28的步骤,包括下载数据库、解压数据包、安装必要组件和启动MySQL服务。 ... [详细]
  • 本文介绍了 Linux 系统中用于定期执行任务的 cron 服务及其配置方法。通过 crond 和 crontab 命令,用户可以轻松地安排系统和用户级别的周期性任务。 ... [详细]
  • 本文介绍了Spring 2.0引入的TaskExecutor接口及其多种实现,包括同步和异步执行任务的方式。文章详细解释了如何在Spring应用中配置和使用这些线程池实现,以提高应用的性能和可管理性。 ... [详细]
  • 本文详细介绍了MySQL数据库服务器(mysqld)和客户端(mysql)的区别,并提供了多种启动和关闭MySQL服务器的方法。通过这些方法,您可以更好地管理和维护MySQL数据库。 ... [详细]
  • 操作系统如何通过进程控制块管理进程
    本文详细介绍了操作系统如何通过进程控制块(PCB)来管理和控制进程。PCB是操作系统感知进程存在的重要数据结构,包含了进程的标识符、状态、资源清单等关键信息。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • ZooKeeper 入门指南
    本文将详细介绍ZooKeeper的工作机制、特点、数据结构以及常见的应用场景,包括统一命名服务、统一配置管理、统一集群管理、服务器动态上下线和软负载均衡。 ... [详细]
  • 如何在服务器上配置SSL证书
    SSL证书是用于验证互联网上身份的一种数字凭证,通过启用HTTPS协议,确保用户与服务器之间的通信安全。本文将详细介绍如何在API和服务器上配置SSL证书,以提升网站的安全性和可信度。 ... [详细]
  • Redis 脑裂现象及其应对策略
    本文探讨了 Redis 集群中的脑裂现象及其解决方案,包括脑裂的成因、影响以及如何通过配置项防止脑裂的发生。 ... [详细]
author-avatar
一啖过
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有