Chinaunix首页 | 论坛 | 博客
  • 博客访问: 762624
  • 博文数量: 803
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 5015
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-28 10:29
文章分类

全部博文(803)

文章存档

2011年(1)

2008年(802)

我的朋友

分类:

2008-10-29 11:42:54


  摘要:下的应用开发起步--简化蚂蚁制作
  
  在读过本栏目先前有关的下的编程相关知识后,亲爱的网友。不知你们是否开始迫不及待地想开始你的第一个程序啊,当然不是那种简单的“HELLO WORLD!”啦(^=^...).
  
    在这里,linuxbird将和你一道作个简单的LINUX下的蚂蚁程序,就是DOWNLOAD吧,文件,不过呐,你可别期望它现在就象著名的netants那样强劲啊。你可别期望太高。(嘻嘻。。。。。。)
  
    但是,我觉得,“蚂蚁虽小,五脏俱全”所以,通过这一例子,还是可以学到linux下编程的一些精髓。即使是九牛一毛也是不错的。
  
    OK, 废话少说,LET'S FLY WITH ME!!!!
  
    基本思路是这样的:利用socket来建立链接,然后用html的get方法来文件。
  
    具体步骤如下:
  
    1.先从配置文件ant.conf中读取代理的的信息:代理地址、代理服务服务器的端口。或者直接从命令行中取得这些参数。
  
    2.在取得这些数据后,就可以用开始做DOWNLOAD的工作了,在这里要明白其download的指令主要是用HTTP的GET方法。另外以下程序过程中要用到以下一些系统调用:
  
    1)socket 所属库
  
    这是最基本的工具,用的时候要把这两个库#include进来。有关套接口的详细知识我这里就不多讲了,主要是用它创建一个套接口。
  
    定义如下:
  
   int socket(int domain,int type,int protocol);
  
    其中:
  
   domain为 AF_INET,
  
    第二参数为套接口的类型:SOCK_STREAM或SOCK_DRGAM.这里用前者。
  
    第三个参数为0
  
    sock返回的是结果存在一个数据结构sockaddr_in中,这个结构如下:
  
   struct sockaddr_in{
   short int sin_family; /* 存放domain*/
   unsigned short int sin_port; /*存放链接端口*/
   struct in_addr sin_addr; /*存放目标地址*/
   unsigned char sin_zero[8]; /* 存放该数据结构的长度*/
   }
  
    2)connect 所属库
  
    在成功创建socket后,就可以进行连接工作了。
  
    该函数头定义如下:
  
   int connect(int sockfd,struct sockaddr *serv_addr,int addrlen);
  
    其中:
  
   sockfd: 创建socket时返回的套接口文件描述字符;
   serv_addr: 指向数据结构sockaddr的指针;
  sin_zero[8]: 长度,可以用sizeof(cockaddr_in);
  
    3)gethostbyname 所属库
  
    这个是根据域名返回IP地址的函数的.
  
    它的返回是指向数据结构 hostent的指针,该数据结构定义如下:
  
  struct hostent{
   char *h_name; /*主机的正式名称*/
   char **h_aliases; /* 主机的别名*/
   int h_addrtype; /*返回的地址类型,一般是AF_INET*/
   int h_length; /* 地址的字节长度*/
   char **h_addr_list /*主机的网络地址*/
  }
  
    4)sigaction 所属库
  
   int sigaction(int signum, const struct sigaction *act,
   struct sigaction *oldact);
  
    主要是用来处理进程突然中断的,旧的进程将在保存在oldact中的。oldact是指向数据结构sigaction的指针。
  
   struct sigaction {
   void (*sa_handler)(int);
   sigset_t sa_mask;
   int sa_flags;
   void (*sa_restorer)(void);
   }
  
    5)getopt 所属库
  
   int getopt(int argc, char * const argv[],
   const char *optstring);
  
    该函数主要是用来分析命令行中输入参数的。
  
    其中: optstring为字符匹配串。
  
    并且取值的结果存放在char *optarg
  
  
  
【责编:admin】

--------------------next---------------------

阅读(314) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~