摘要:Linux下的应用开发起步--简化蚂蚁制作 在读过本栏目先前有关的linux下的编程相关知识后,亲爱的网友。不知你们是否开始迫不及待地想开始你的第一个程序啊,当然不是那种简单的“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
|