linux下的應用開發(fā)起步--簡化螞蟻制作(一)
2024-07-21 02:37:29
供稿:網(wǎng)友
摘要:linux下的應用開發(fā)起步--簡化螞蟻制作
在讀過本欄目先前有關的linux下的編程相關知識后,親愛的網(wǎng)友。不知你們是否開始迫不及待地想開始你的第一個程序啊,當然不是那種簡單的“HELLO WORLD!”啦(^=^...).
在這里,linuxbird將和你一道作個簡單的LINUX下的螞蟻程序,就是DOWNLOAD吧,下載文件,不過吶,你可別期望它現(xiàn)在就象聞名的netants那樣強勁啊。你可別期望太高。(嘻嘻。。。。。。)
但是,我覺得,“螞蟻雖小,五臟俱全”所以,通過這一例子,還是可以學到linux下編程的一些精髓。即使是九牛一毛也是不錯的。
OK, 廢話少說,LET'S FLY WITH ME!!!!
基本思路是這樣的:利用socket來建立鏈接,然后用Html的get方法來下載文件。
具體步驟如下:
1.先從配置文件ant.conf中讀取代理服務器的的信息:代理服務器地址、代理服務服務器的端口。或者直接從命令行中取得這些參數(shù)。
2.在取得這些數(shù)據(jù)后,就可以用開始做DOWNLOAD的工作了,在這里要明白其download的指令主要是用HTTP協(xié)議的GET方法。另外以下程序過程中要用到以下一些系統(tǒng)調(diào)用:
1)socket 所屬庫,
這是最基本的工具,用的時候要把這兩個庫#include進來。有關套接口的具體知識我這里就不多講了,主要是用它創(chuàng)建一個套接口。
定義如下:
int socket(int domain,int type,int PRotocol);
其中:
domain為 AF_INET,
第二參數(shù)為套接口的類型:SOCK_STREAM或SOCK_DRGAM.這里用前者。
第三個參數(shù)為0
sock返回的是結果存在一個數(shù)據(jù)結構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]; /* 存放該數(shù)據(jù)結構的長度*/
}
2)connect 所屬庫,
在成功創(chuàng)建socket后,就可以進行連接工作了。
該函數(shù)頭定義如下:
int connect(int sockfd,struct sockaddr *serv_addr,int addrlen);
其中:
sockfd: 創(chuàng)建socket時返回的套接口文件描述字符;
serv_addr: 指向數(shù)據(jù)結構sockaddr的指針;
sin_zero[8]: 長度,可以用sizeof(cockaddr_in);
3)gethostbyname 所屬庫
這個是根據(jù)域名返回ip地址的函數(shù)的.
它的返回是指向數(shù)據(jù)結構 hostent的指針,該數(shù)據(jù)結構定義如下:
struct hostent{
char *h_name; /*主機的正式名稱*/
char **h_aliases; /* 主機的別名*/
int h_addrtype; /*返回的地址類型,一般是AF_INET*/
int h_length; /* 地址的字節(jié)長度*/
char **h_addr_list /*主機的網(wǎng)絡地址*/
}
4)sigaction 所屬庫
int sigaction(int signum, const struct sigaction *act,
struct sigaction *oldact);
主要是用來處理進程忽然中斷的,舊的進程將在保存在oldact中的。
oldact是指向數(shù)據(jù)結構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);
該函數(shù)主要是用來分析命令行中輸入?yún)?shù)的。
其中: optstring為字符匹配串。
并且取值的結果存放在char *optarg