⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 305.htm

📁 unix高级编程原吗
💻 HTM
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>apue</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">               ● UNIX网络编程                       (BM: clown)                </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="301.htm">上一层</a>][<a href="306.htm">下一篇</a>]
<hr><p align="left"><small>发信人: guru (好读书,不求甚解), 信区: UNP <br>

标  题: linux下面的应用开发起步--小小的网络蚂蚁(-)(转载) <br>

发信站: UNIX编程 (2001年08月28日18:36:20 星期二), 站内信件 <br>

  <br>

【 以下文字转载自 APUE 讨论区 】 <br>

【 原文由 chillone 所发表 】 <br>

  <br>

linux下的应用开发起步--简化蚂蚁制作(一) <br>

原创 01-03-17 11:23 200p linuxbird <br>

--------------- <br>

----------------------------------------------------- <br>

------------ <br>

  <br>

在读过本栏目先前有关的linux下的编程相关知识后,亲爱的网友。 <br>

不知你们是 <br>

否开始迫不及待地想开始你的第一个程序啊, <br>

当然不是那种简单的“HELLO <br>

WORLD!”啦(^=^...). <br>

在这里,linuxbird将和你一道作个简单的LINUX下的蚂蚁程序, <br>

就是DOWNLOAD <br>

吧,下载文件,不过呐, <br>

你可别期望它现在就象著名的netants那样强劲啊。 <br>

你 <br>

你 <br>

可别期望太高。(嘻嘻。。。。。。) <br>

但是,我觉得,“蚂蚁虽小,五脏俱全”所以, <br>

通过这一例子,还是可以学到 <br>

linux下编程的一些精髓。 <br>

即使是九牛一毛也是不错的。 <br>

OK, 废话少说,LET'S FLY WITH ME!!!! <br>

基本思路是这样的: <br>

利用socket来建立链接, <br>

然后用html的get方法来下载文 <br>

件。 <br>

具体步骤如下: <br>

  <br>

1.先从配置文件ant.conf中读取代理服务器 <br>

  的的信息:代理服务器地址、代理 <br>

服务服务器的端口。 <br>

 或者直接从 <br>

  命令行中取得这些参数。 <br>

2.在取得这些数据后,就可以用开始做DOWNLOAD的工作了, <br>

在这里要明白其 <br>

download的指令主要是用HTTP协议的GET方法。 <br>

另外以下程序过程中要用到以下 <br>

一些系统调用: <br>

一些系统调用: <br>

 1)socket 所属库<sys/types.h>,<sys/socket.h> <br>

  <br>

这是最基本的工具,用的时候要把这两个库#include进来。 <br>

  有关套接口的详细知识我这里就不多讲了, <br>

主要是用它创建一个套接口。 <br>

  <br>

定义如下: <br>

  <br>

int socket(int domain,int type,int protocol); <br>

  <br>

 其中: <br>

     domain为 AF_INET, <br>

  <br>

第二参数为套接口的类型:SOCK_STREAM或SOCK_DRGAM.这里用前者。 <br>

第三个参数为0 <br>

  sock返回的是结果存在一个数据结构sockaddr_in中,这个结构如下: <br>

  struct sockaddr_in{ <br>

  <br>

    short int              sin_family;    /* 存放domain*/ <br>

    unsigned short int     sin_port;      /*存放链接端口*/ <br>

  <br>

    struct in_addr         sin_addr;      /*存放目标地址*/ <br>



  <br>

    unsigned char      sin_zero[8];   /* 存放该数据结构的长度*/ <br>

  <br>

  } <br>

  <br>

 2)connect 所属库<sys/types.h>,<sys/socket.h> <br>

  <br>

在成功创建socket后,就可以进行连接工作了。 <br>

该函数头定义如下: <br>

   int connect(int sockfd,struct sockaddr *serv_addr,int addrlen); <br>

 其中: <br>

  <br>

    sockfd:      创建socket时返回的套接口文件描述字符; <br>

  <br>

    serv_addr:      指向数据结构sockaddr的指针; <br>

    sin_zero[8]:      长度,可以用sizeof(cockaddr_in); <br>

  <br>

 3)gethostbyname  所属库<unistd.h> <br>

  <br>

 这个是根据域名返回IP地址的函数的. <br>

它的返回是指向数据结构 hostent的指针, <br>

该数据结构定义如下: <br>



struct hostent{ <br>

        char  *h_name;        /*主机的正式名称*/ <br>

  <br>

  char  **h_aliases;    /* 主机的别名*/ <br>

  <br>

  int   h_addrtype;     /*返回的地址类型,一般是AF_INET*/ <br>

  <br>

  int   h_length;       /* 地址的字节长度*/ <br>

  <br>

  char   **h_addr_list   /*主机的网络地址*/ <br>

} <br>

  <br>

4)sigaction  所属库<signal.h> <br>

  <br>

  int sigaction(int signum,  const  struct  sigaction  *act, <br>

       struct sigaction *oldact); <br>

 主要是用来处理进程突然中断的,旧的进程将在保存在oldact中的。 <br>

oldact是 <br>

指向数据结构sigaction <br>

的指针。 <br>

  <br>

 struct sigaction { <br>



  <br>

 void (*sa_handler)(int); <br>

  <br>

 sigset_t sa_mask; <br>

  <br>

 int sa_flags; <br>

  <br>

 void (*sa_restorer)(void); <br>

  <br>

} <br>

  <br>

5)getopt 所属库<unistd.h> <br>

  <br>

 int getopt(int argc, char * const argv[], <br>

 const char *optstring); <br>

  <br>

 该函数主要是用来分析命令行中输入参数的。 <br>

  <br>

 其中: optstring为字符匹配串。 <br>

  <br>

 并且取值的结果存放在char *optarg <br>

  <br>



  <br>

  <br>

-- <br>

一头栽倒luckylucky的怀里 <br>

※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 202.114.1.61] -- <br>

※ 转载:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 202.114.36.225] <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="301.htm">上一层</a>][<a href="306.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -