当前位置:  首页  >  服务器技术  >  Linux/unix  >  Linux教程

多线程解析域名-一方有

这是我参加比赛得到的题目开发一个域名批量查询程序,文本文件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> /* 
吐了个 "CAO" !
扫码关注 PHP1 官方微信号
PHP1.CN | 中国最专业的PHP中文社区 | PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | PHP问答
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved PHP1.CN 第一PHP社区 版权所有