﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-备注学院-文章分类-C&amp;C++</title><link>http://www.blogjava.net/smildlzj/category/27386.html</link><description>LuLu</description><language>zh-cn</language><lastBuildDate>Sat, 24 Nov 2007 01:25:35 GMT</lastBuildDate><pubDate>Sat, 24 Nov 2007 01:25:35 GMT</pubDate><ttl>60</ttl><item><title>详谈调用winpcap驱动写arp多功能工具</title><link>http://www.blogjava.net/smildlzj/articles/162010.html</link><dc:creator>smildlzj</dc:creator><author>smildlzj</author><pubDate>Wed, 21 Nov 2007 01:59:00 GMT</pubDate><guid>http://www.blogjava.net/smildlzj/articles/162010.html</guid><wfw:comment>http://www.blogjava.net/smildlzj/comments/162010.html</wfw:comment><comments>http://www.blogjava.net/smildlzj/articles/162010.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smildlzj/comments/commentRss/162010.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smildlzj/services/trackbacks/162010.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 创建时间：2002-09-14文章属性：原创文章来源：中华安全网文章提交：TOo2y (too2y_at_safechina.net)详谈调用winpcap驱动写arp多功能工具Author: TOo2y[原创]E-mail: TOo2y@safechina.netHomepage: www.safechina.netDate: 11-9-2002一...&nbsp;&nbsp;<a href='http://www.blogjava.net/smildlzj/articles/162010.html'>阅读全文</a><img src ="http://www.blogjava.net/smildlzj/aggbug/162010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smildlzj/" target="_blank">smildlzj</a> 2007-11-21 09:59 <a href="http://www.blogjava.net/smildlzj/articles/162010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言函数集合</title><link>http://www.blogjava.net/smildlzj/articles/161187.html</link><dc:creator>smildlzj</dc:creator><author>smildlzj</author><pubDate>Sat, 17 Nov 2007 03:24:00 GMT</pubDate><guid>http://www.blogjava.net/smildlzj/articles/161187.html</guid><wfw:comment>http://www.blogjava.net/smildlzj/comments/161187.html</wfw:comment><comments>http://www.blogjava.net/smildlzj/articles/161187.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smildlzj/comments/commentRss/161187.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smildlzj/services/trackbacks/161187.html</trackback:ping><description><![CDATA[<p><font face="宋体" size="3">转换子程序,函数库为math.h、stdlib.h、ctype.h、float.h<br />
char&nbsp;&nbsp;&nbsp;&nbsp; *ecvt(double value,int ndigit,int *decpt,int *sign)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将浮点数value转换成字符串并返回该字符串<br />
char&nbsp;&nbsp;&nbsp;&nbsp; *fcvt(double value,int ndigit,int *decpt,int *sign)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将浮点数value转换成字符串并返回该字符串<br />
char&nbsp;&nbsp;&nbsp;&nbsp; *gcvt(double value,int ndigit,char *buf)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将数value转换成字符串并存于buf中,并返回buf的指针<br />
char&nbsp;&nbsp;&nbsp; *ultoa(unsigned long value,char *string,int radix)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将无符号整型数value转换成字符串并返回该字符串,radix为转换时所用基数<br />
char&nbsp;&nbsp;&nbsp;&nbsp; *ltoa(long value,char *string,int radix)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将长整型数value转换成字符串并返回该字符串,radix为转换时所用基数<br />
char&nbsp;&nbsp;&nbsp;&nbsp; *itoa(int value,char *string,int radix)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将整数value转换成字符串存入string,radix为转换时所用基数<br />
double atof(char *nptr) 将字符串nptr转换成双精度数,并返回这个数,错误返回0<br />
int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; atoi(char *nptr) 将字符串nptr转换成整型数,&nbsp;&nbsp;&nbsp; 并返回这个数,错误返回0<br />
long&nbsp;&nbsp;&nbsp;&nbsp; atol(char *nptr) 将字符串nptr转换成长整型数,并返回这个数,错误返回0<br />
double strtod(char *str,char **endptr)将字符串str转换成双精度数,并返回这个数,<br />
long&nbsp;&nbsp;&nbsp;&nbsp; strtol(char *str,char **endptr,int base)将字符串str转换成长整型数,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 并返回这个数,<br />
int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; toascii(int c)&nbsp;&nbsp;&nbsp;&nbsp; 返回c相应的ASCII<br />
int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tolower(int ch)&nbsp;&nbsp;&nbsp; 若ch是大写字母('A'-'Z')返回相应的小写字母('a'-'z')<br />
int&nbsp;&nbsp;&nbsp;&nbsp; _tolower(int ch)&nbsp;&nbsp;&nbsp; 返回ch相应的小写字母('a'-'z')<br />
int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; toupper(int ch)&nbsp;&nbsp;&nbsp; 若ch是小写字母('a'-'z')返回相应的大写字母('A'-'Z')<br />
int&nbsp;&nbsp;&nbsp;&nbsp; _toupper(int ch)&nbsp;&nbsp;&nbsp; 返回ch相应的大写字母('A'-'Z')</font></p>
<p><font face="宋体" size="3">诊断函数,所在函数库为assert.h、math.h<br />
void&nbsp;&nbsp;&nbsp;&nbsp; assert(int test) 一个扩展成if语句那样的宏，如果test测试失败，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 就显示一个信息并异常终止程序,无返回值<br />
void&nbsp;&nbsp;&nbsp;&nbsp; perror(char *string) 本函数将显示最近一次的错误信息，格式如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字符串string:错误信息<br />
char&nbsp;&nbsp;&nbsp;&nbsp; *strerror(char *str) 本函数返回最近一次的错误信息,格式如下:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 字符串str:错误信息<br />
int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; matherr(struct exception *e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用户修改数学错误返回信息函数(没有必要使用)<br />
double _matherr(_mexcep why,char *fun,double *arg1p,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double *arg2p,double retval)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用户修改数学错误返回信息函数(没有必要使用)</font></p>
<p><font face="宋体" size="3">输入输出子程序,函数库为io.h、conio.h、stat.h、dos.h、stdio.h、signal.h<br />
int&nbsp;&nbsp;&nbsp;&nbsp; kbhit()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本函数返回最近所敲的按键<br />
int&nbsp;&nbsp;&nbsp;&nbsp; fgetchar() 从控制台(键盘)读一个字符，显示在屏幕上<br />
int&nbsp;&nbsp;&nbsp;&nbsp; getch()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从控制台(键盘)读一个字符，不显示在屏幕上<br />
int&nbsp;&nbsp;&nbsp;&nbsp; putch()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 向控制台(键盘)写一个字符<br />
int&nbsp;&nbsp;&nbsp;&nbsp; getchar()&nbsp;&nbsp;&nbsp; 从控制台(键盘)读一个字符，显示在屏幕上<br />
int&nbsp;&nbsp;&nbsp;&nbsp; putchar()&nbsp;&nbsp;&nbsp; 向控制台(键盘)写一个字符<br />
int&nbsp;&nbsp;&nbsp;&nbsp; getche()&nbsp;&nbsp;&nbsp;&nbsp; 从控制台(键盘)读一个字符，显示在屏幕上<br />
int&nbsp;&nbsp;&nbsp;&nbsp; ungetch(int c) 把字符c退回给控制台(键盘)<br />
char *cgets(char *string) 从控制台(键盘)读入字符串存于string中<br />
int&nbsp;&nbsp;&nbsp;&nbsp; scanf(char *format[,argument&#8230;])从控制台读入一个字符串,分别对各个参数进行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 赋值,使用BIOS进行输出<br />
int&nbsp;&nbsp;&nbsp;&nbsp; vscanf(char *format,Valist param)从控制台读入一个字符串,分别对各个参数进行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 赋值,使用BIOS进行输出,参数从Valist param中取得<br />
int&nbsp;&nbsp;&nbsp;&nbsp; cscanf(char *format[,argument&#8230;])从控制台读入一个字符串,分别对各个参数进行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 赋值,直接对控制台作操作,比如显示器在显示时字符时即为直接写频方式显示<br />
int&nbsp;&nbsp;&nbsp;&nbsp; sscanf(char *string,char *format[,argument,&#8230;])通过字符串string,分别对各个<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数进行赋值<br />
int&nbsp;&nbsp;&nbsp;&nbsp; vsscanf(char *string,char *format,Vlist param)通过字符串string,分别对各个<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数进行赋值,参数从Vlist param中取得<br />
int&nbsp;&nbsp;&nbsp;&nbsp; puts(char *string)&nbsp;&nbsp;&nbsp; 发关一个字符串string给控制台(显示器),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用BIOS进行输出<br />
void&nbsp;&nbsp;&nbsp; cputs(char *string) 发送一个字符串string给控制台(显示器),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 直接对控制台作操作,比如显示器即为直接写频方式显示<br />
int&nbsp;&nbsp;&nbsp;&nbsp; printf(char *format[,argument,&#8230;]) 发送格式化字符串输出给控制台(显示器)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用BIOS进行输出<br />
int&nbsp;&nbsp;&nbsp;&nbsp; vprintf(char *format,Valist param) 发送格式化字符串输出给控制台(显示器)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用BIOS进行输出,参数从Valist param中取得<br />
int&nbsp;&nbsp;&nbsp;&nbsp; cprintf(char *format[,argument,&#8230;]) 发送格式化字符串输出给控制台(显示器),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 直接对控制台作操作,比如显示器即为直接写频方式显示<br />
int&nbsp;&nbsp;&nbsp;&nbsp; vcprintf(char *format,Valist param)发送格式化字符串输出给控制台(显示器),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 直接对控制台作操作,比如显示器即为直接写频方式显示,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数从Valist param中取得<br />
int&nbsp;&nbsp;&nbsp;&nbsp; sprintf(char *string,char *format[,argument,&#8230;])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将字符串string的内容重新写为格式化后的字符串<br />
int&nbsp;&nbsp;&nbsp;&nbsp; vsprintf(char *string,char *format,Valist param)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将字符串string的内容重新写为格式化后的字符串,参数从Valist param中取得<br />
int&nbsp;&nbsp;&nbsp;&nbsp; rename(char *oldname,char *newname)将文件oldname的名称改为newname<br />
int&nbsp;&nbsp;&nbsp;&nbsp; ioctl(int handle,int cmd[,int *argdx,int argcx])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本函数是用来控制输入/输出设备的，请见下表：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ┌───┬────────────────────────────┐<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │cmd值 │功能&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ├───┼────────────────────────────┤<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; │取出设备信息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; │设置设备信息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; │把argcx字节读入由argdx所指的地址&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp; │在argdx所指的地址写argcx字节&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp; │除把handle当作设备号(0=当前,1=A,等)之外,均和cmd=2时一样 │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp; │除把handle当作设备号(0=当前,1=A,等)之外,均和cmd=3时一样 │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp; │取输入状态&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp;&nbsp;&nbsp; │取输出状态&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp; │测试可换性;只对于DOS 3.x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp; 11&nbsp;&nbsp;&nbsp; │置分享冲突的重算计数;只对DOS 3.x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └───┴────────────────────────────┘<br />
int&nbsp;&nbsp;&nbsp;&nbsp; (*ssignal(int sig,int(*action)())()执行软件信号(没必要使用)<br />
int&nbsp;&nbsp;&nbsp;&nbsp; gsignal(int sig)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 执行软件信号(没必要使用)</font></p>
<p><font face="宋体" size="3">int&nbsp;&nbsp;&nbsp;&nbsp; _open(char *pathname,int access)为读或写打开一个文件,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 按后按access来确定是读文件还是写文件,access值见下表<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ┌──────┬────────────────────┐<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │access值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │意义&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ├──────┼────────────────────┤<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_RDONLY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │读文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_WRONLY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │写文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_RDWR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │即读也写&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_NOINHERIT │若文件没有传递给子程序,则被包含&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_DENYALL&nbsp;&nbsp;&nbsp;&nbsp; │只允许当前处理必须存取的文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_DENYWRITE │只允许从任何其它打开的文件读&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_DENYREAD&nbsp;&nbsp;&nbsp; │只允许从任何其它打开的文件写&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_DENYNONE&nbsp;&nbsp;&nbsp; │允许其它共享打开的文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └──────┴────────────────────┘<br />
int&nbsp;&nbsp;&nbsp;&nbsp; open(char *pathname,int access[,int permiss])为读或写打开一个文件,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 按后按access来确定是读文件还是写文件,access值见下表<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ┌────┬────────────────────┐<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │access值│意义&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ├────┼────────────────────┤<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_RDONLY│读文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_WRONLY│写文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_RDWR&nbsp;&nbsp;&nbsp; │即读也写&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_NDELAY│没有使用;对UNIX系统兼容&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_APPEND│即读也写,但每次写总是在文件尾添加&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_CREAT │若文件存在,此标志无用;若不存在,建新文件 │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_TRUNC │若文件存在,则长度被截为0,属性不变&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_EXCL&nbsp;&nbsp;&nbsp; │未用;对UNIX系统兼容&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_BINARY│此标志可显示地给出以二进制方式打开文件&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │O_TEXT&nbsp;&nbsp;&nbsp; │此标志可用于显示地给出以文本方式打开文件│<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └────┴────────────────────┘<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; permiss为文件属性,可为以下值:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S_IWRITE允许写&nbsp;&nbsp;&nbsp; S_IREAD允许读&nbsp;&nbsp;&nbsp; S_IREAD|S_IWRITE允许读、写<br />
int&nbsp;&nbsp;&nbsp;&nbsp; creat(char *filename,int permiss)&nbsp;&nbsp;&nbsp; 建立一个新文件filename，并设定<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 读写性。permiss为文件读写性，可以为以下值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S_IWRITE允许写&nbsp;&nbsp;&nbsp; S_IREAD允许读&nbsp;&nbsp;&nbsp; S_IREAD|S_IWRITE允许读、写<br />
int&nbsp;&nbsp;&nbsp; _creat(char *filename,int attrib)&nbsp;&nbsp;&nbsp; 建立一个新文件filename，并设定文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性。attrib为文件属性，可以为以下值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FA_RDONLY只读&nbsp;&nbsp;&nbsp; FA_HIDDEN隐藏&nbsp;&nbsp;&nbsp; FA_SYSTEM系统<br />
int&nbsp;&nbsp;&nbsp;&nbsp; creatnew(char *filenamt,int attrib) 建立一个新文件filename，并设定文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性。attrib为文件属性，可以为以下值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FA_RDONLY只读&nbsp;&nbsp;&nbsp; FA_HIDDEN隐藏&nbsp;&nbsp;&nbsp; FA_SYSTEM系统<br />
int&nbsp;&nbsp;&nbsp;&nbsp; creattemp(char *filenamt,int attrib) 建立一个新文件filename，并设定文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性。attrib为文件属性，可以为以下值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FA_RDONLY只读&nbsp;&nbsp;&nbsp; FA_HIDDEN隐藏&nbsp;&nbsp;&nbsp; FA_SYSTEM系统<br />
int&nbsp;&nbsp;&nbsp;&nbsp; read(int handle,void *buf,int nbyte)从文件号为handle的文件中读nbyte个字符<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存入buf中<br />
int&nbsp;&nbsp;&nbsp; _read(int handle,void *buf,int nbyte)从文件号为handle的文件中读nbyte个字符<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存入buf中,直接调用MSDOS进行操作.<br />
int&nbsp;&nbsp;&nbsp;&nbsp; write(int handle,void *buf,int nbyte)将buf中的nbyte个字符写入文件号<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为handle的文件中<br />
int&nbsp;&nbsp;&nbsp; _write(int handle,void *buf,int nbyte)将buf中的nbyte个字符写入文件号<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为handle的文件中<br />
int&nbsp;&nbsp;&nbsp;&nbsp; dup(int handle) 复制一个文件处理指针handle,返回这个指针<br />
int&nbsp;&nbsp;&nbsp;&nbsp; dup2(int handle,int newhandle) 复制一个文件处理指针handle到newhandle<br />
int&nbsp;&nbsp;&nbsp;&nbsp; eof(int *handle)检查文件是否结束,结束返回1,否则返回0<br />
long&nbsp;&nbsp;&nbsp; filelength(int handle) 返回文件长度，handle为文件号<br />
int&nbsp;&nbsp;&nbsp;&nbsp; setmode(int handle,unsigned mode)本函数用来设定文件号为handle的文件的打<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开方式<br />
int&nbsp;&nbsp;&nbsp;&nbsp; getftime(int handle,struct ftime *ftime) 读取文件号为handle的文件的时间，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 并将文件时间存于ftime结构中，成功返回0,ftime结构如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ┌─────────────────┐<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │struct ftime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │ unsigned ft_tsec:5; /*秒*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │ unsigned ft_min:6;&nbsp;&nbsp;&nbsp; /*分*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │ unsigned ft_hour:5; /*时*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │ unsigned ft_day:5;&nbsp;&nbsp;&nbsp; /*日*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │ unsigned ft_month:4;/*月*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │ unsigned ft_year:1; /*年-1980*/&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─────────────────┘<br />
int&nbsp;&nbsp;&nbsp;&nbsp; setftime(int handle,struct ftime *ftime) 重写文件号为handle的文件时间,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 新时间在结构ftime中.成功返回0.结构ftime如下:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ┌─────────────────┐<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │struct ftime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │ unsigned ft_tsec:5; /*秒*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │ unsigned ft_min:6;&nbsp;&nbsp;&nbsp; /*分*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │ unsigned ft_hour:5; /*时*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │ unsigned ft_day:5;&nbsp;&nbsp;&nbsp; /*日*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │ unsigned ft_month:4;/*月*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │ unsigned ft_year:1; /*年-1980*/&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └─────────────────┘<br />
long&nbsp;&nbsp;&nbsp; lseek(int handle,long offset,int fromwhere) 本函数将文件号为handle的文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 的指针移到fromwhere后的第offset个字节处.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SEEK_SET 文件开关&nbsp;&nbsp;&nbsp;&nbsp; SEEK_CUR 当前位置&nbsp;&nbsp;&nbsp;&nbsp; SEEK_END 文件尾<br />
long&nbsp;&nbsp;&nbsp; tell(int handle) 本函数返回文件号为handle的文件指针,以字节表示<br />
int&nbsp;&nbsp;&nbsp;&nbsp; isatty(int handle)本函数用来取设备handle的类型<br />
int&nbsp;&nbsp;&nbsp;&nbsp; lock(int handle,long offset,long length)&nbsp;&nbsp;&nbsp;&nbsp; 对文件共享作封锁<br />
int&nbsp;&nbsp;&nbsp;&nbsp; unlock(int handle,long offset,long length) 打开对文件共享的封锁<br />
int&nbsp;&nbsp;&nbsp;&nbsp; close(int handle) 关闭handle所表示的文件处理,handle是从_creat、creat、<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; creatnew、creattemp、dup、dup2、_open、open中的一个处调用获得的文件处理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 成功返回0否则返回-1,可用于UNIX系统<br />
int&nbsp;&nbsp;&nbsp; _close(int handle) 关闭handle所表示的文件处理,handle是从_creat、creat、<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; creatnew、creattemp、dup、dup2、_open、open中的一个处调用获得的文件处理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 成功返回0否则返回-1,只能用于MSDOS系统</font></p>
<p><font face="宋体" size="3">FILE *fopen(char *filename,char *type) 打开一个文件filename,打开方式为type，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 并返回这个文件指针，type可为以下字符串加上后缀<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ┌──┬────┬───────┬────────┐<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │type│读写性&nbsp;&nbsp;&nbsp; │文本/2进制文件│建新/打开旧文件 │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ├──┼────┼───────┼────────┤<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │r&nbsp;&nbsp;&nbsp;&nbsp; │读&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │文本&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │打开旧的文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │w&nbsp;&nbsp;&nbsp;&nbsp; │写&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │文本&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │建新文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │a&nbsp;&nbsp;&nbsp;&nbsp; │添加&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │文本&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │有就打开无则建新│<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │r+&nbsp;&nbsp;&nbsp; │读/写&nbsp;&nbsp;&nbsp;&nbsp; │不限制&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │打开&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │w+&nbsp;&nbsp;&nbsp; │读/写&nbsp;&nbsp;&nbsp;&nbsp; │不限制&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │建新文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │a+&nbsp;&nbsp;&nbsp; │读/添加 │不限制&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │有就打开无则建新│<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └──┴────┴───────┴────────┘<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可加的后缀为t、b。加b表示文件以二进制形式进行操作，t没必要使用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例: ┌──────────────────┐<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │#include&lt;stdio.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │main()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │ FILE *fp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │ fp=fopen("C:\\WPS\\WPS.EXE","r+b");│<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └──────────────────┘<br />
FILE *fdopen(int ahndle,char *type)<br />
FILE *freopen(char *filename,char *type,FILE *stream)<br />
int&nbsp;&nbsp;&nbsp;&nbsp; getc(FILE *stream)&nbsp;&nbsp;&nbsp; 从流stream中读一个字符，并返回这个字符<br />
int&nbsp;&nbsp;&nbsp;&nbsp; putc(int ch,FILE *stream)向流stream写入一个字符ch<br />
int&nbsp;&nbsp;&nbsp;&nbsp; getw(FILE *stream) 从流stream读入一个整数，错误返回EOF<br />
int&nbsp;&nbsp;&nbsp;&nbsp; putw(int w,FILE *stream)向流stream写入一个整数<br />
int&nbsp;&nbsp;&nbsp;&nbsp; ungetc(char c,FILE *stream) 把字符c退回给流stream，下一次读进的字符将是c<br />
int&nbsp;&nbsp;&nbsp;&nbsp; fgetc(FILE *stream) 从流stream处读一个字符，并返回这个字符<br />
int&nbsp;&nbsp;&nbsp;&nbsp; fputc(int ch,FILE *stream) 将字符ch写入流stream中<br />
char *fgets(char *string,int n,FILE *stream) 从流stream中读n个字符存入string中<br />
int&nbsp;&nbsp;&nbsp;&nbsp; fputs(char *string,FILE *stream) 将字符串string写入流stream中<br />
int&nbsp;&nbsp;&nbsp;&nbsp; fread(void *ptr,int size,int nitems,FILE *stream) 从流stream中读入nitems<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 个长度为size的字符串存入ptr中<br />
int&nbsp;&nbsp;&nbsp;&nbsp; fwrite(void *ptr,int size,int nitems,FILE *stream) 向流stream中写入nitems<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 个长度为size的字符串,字符串在ptr中<br />
int&nbsp;&nbsp;&nbsp;&nbsp; fscanf(FILE *stream,char *format[,argument,&#8230;]) 以格式化形式从流stream中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 读入一个字符串<br />
int&nbsp;&nbsp;&nbsp;&nbsp; vfscanf(FILE *stream,char *format,Valist param) 以格式化形式从流stream中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 读入一个字符串,参数从Valist param中取得<br />
int&nbsp;&nbsp;&nbsp;&nbsp; fprintf(FILE *stream,char *format[,argument,&#8230;])&nbsp;&nbsp;&nbsp; 以格式化形式将一个字符<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 串写给指定的流stream<br />
int&nbsp;&nbsp;&nbsp;&nbsp; vfprintf(FILE *stream,char *format,Valist param)&nbsp;&nbsp;&nbsp; 以格式化形式将一个字符<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 串写给指定的流stream,参数从Valist param中取得<br />
int&nbsp;&nbsp;&nbsp;&nbsp; fseek(FILE *stream,long offset,int fromwhere) 函数把文件指针移到fromwhere<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所指位置的向后offset个字节处,fromwhere可以为以下值:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SEEK_SET 文件开关&nbsp;&nbsp;&nbsp;&nbsp; SEEK_CUR 当前位置&nbsp;&nbsp;&nbsp;&nbsp; SEEK_END 文件尾<br />
long&nbsp;&nbsp;&nbsp; ftell(FILE *stream)&nbsp;&nbsp;&nbsp; 函数返回定位在stream中的当前文件指针位置,以字节表示<br />
int&nbsp;&nbsp;&nbsp;&nbsp; rewind(FILE *stream) 将当前文件指针stream移到文件开头<br />
int&nbsp;&nbsp;&nbsp;&nbsp; feof(FILE *stream) 检测流stream上的文件指针是否在结束位置<br />
int&nbsp;&nbsp;&nbsp;&nbsp; fileno(FILE *stream) 取流stream上的文件处理，并返回文件处理<br />
int&nbsp;&nbsp;&nbsp;&nbsp; ferror(FILE *stream) 检测流stream上是否有读写错误，如有错误就返回1<br />
void&nbsp;&nbsp;&nbsp; clearerr(FILE *stream) 清除流stream上的读写错误<br />
void&nbsp;&nbsp;&nbsp; setbuf(FILE *stream,char *buf) 给流stream指定一个缓冲区buf<br />
void&nbsp;&nbsp;&nbsp; setvbuf(FILE *stream,char *buf,int type,unsigned size)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 给流stream指定一个缓冲区buf,大小为size,类型为type,type的值见下表<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ┌───┬───────────────────────────────┐<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │type值│意义&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ├───┼───────────────────────────────┤<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │_IOFBF│文件是完全缓冲区,当缓冲区是空时,下一个输入操作将企图填满整个缓│<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │冲区.在输出时,在把任何数据写到文件之前,将完全填充缓冲区.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │_IOLBF│文件是行缓冲区.当缓冲区为空时,下一个输入操作将仍然企图填整个缓│<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │冲区.然而在输出时,每当新行符写到文件,缓冲区就被清洗掉.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │_IONBF│文件是无缓冲的.buf和size参数是被忽略的.每个输入操作将直接从文 │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │件读,每个输出操作将立即把数据写到文件中.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; │<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; └───┴───────────────────────────────┘<br />
int&nbsp;&nbsp;&nbsp;&nbsp; fclose(FILE *stream) 关闭一个流，可以是文件或设备(例如LPT1)<br />
int&nbsp;&nbsp;&nbsp;&nbsp; fcloseall()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关闭所有除stdin或stdout外的流<br />
int&nbsp;&nbsp;&nbsp;&nbsp; fflush(FILE *stream) 关闭一个流，并对缓冲区作处理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 处理即对读的流，将流内内容读入缓冲区；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对写的流，将缓冲区内内容写入流。成功返回0<br />
int&nbsp;&nbsp;&nbsp;&nbsp; fflushall()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关闭所有流，并对流各自的缓冲区作处理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 处理即对读的流，将流内内容读入缓冲区；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对写的流，将缓冲区内内容写入流。成功返回0</font></p>
<p><font face="宋体" size="3">int&nbsp;&nbsp;&nbsp;&nbsp; access(char *filename,int amode) 本函数检查文件filename并返回文件的属性,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 函数将属性存于amode中，amode由以下位的组合构成<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 06可以读、写&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 04可以读&nbsp;&nbsp;&nbsp;&nbsp; 02可以写&nbsp;&nbsp;&nbsp;&nbsp; 01执行(忽略的)&nbsp;&nbsp;&nbsp;&nbsp; 00文件存在<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果filename是一个目录,函数将只确定目录是否存在<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 函数执行成功返回0,否则返回-1<br />
int&nbsp;&nbsp;&nbsp;&nbsp; chmod(char *filename,int permiss) 本函数用于设定文件filename的属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; permiss可以为以下值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S_IWRITE允许写&nbsp;&nbsp;&nbsp; S_IREAD允许读&nbsp;&nbsp;&nbsp; S_IREAD|S_IWRITE允许读、写<br />
int&nbsp;&nbsp;&nbsp; _chmod(char *filename,int func[,int attrib]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本函数用于读取或设定文件filename的属性，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当func=0时，函数返回文件的属性；当func=1时，函数设定文件的属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 若为设定文件属性，attrib可以为下列常数之一<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FA_RDONLY只读&nbsp;&nbsp;&nbsp; FA_HIDDEN隐藏&nbsp;&nbsp;&nbsp; FA_SYSTEM系统<br />
</font></p>
<img src ="http://www.blogjava.net/smildlzj/aggbug/161187.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smildlzj/" target="_blank">smildlzj</a> 2007-11-17 11:24 <a href="http://www.blogjava.net/smildlzj/articles/161187.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用WinSock实现HTTP的GET</title><link>http://www.blogjava.net/smildlzj/articles/161181.html</link><dc:creator>smildlzj</dc:creator><author>smildlzj</author><pubDate>Sat, 17 Nov 2007 02:35:00 GMT</pubDate><guid>http://www.blogjava.net/smildlzj/articles/161181.html</guid><wfw:comment>http://www.blogjava.net/smildlzj/comments/161181.html</wfw:comment><comments>http://www.blogjava.net/smildlzj/articles/161181.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smildlzj/comments/commentRss/161181.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smildlzj/services/trackbacks/161181.html</trackback:ping><description><![CDATA[<p>#include &lt;stdio.h&gt;<br />
#include &lt;stdlib.h&gt;<br />
#include &lt;string.h&gt;<br />
#include &lt;winsock2.h&gt; //header<br />
#pragma comment (lib, "ws2_32.lib") //lib</p>
<p>void SendString(SOCKET sock,LPCSTR str)<br />
{<br />
&nbsp;&nbsp;&nbsp; send(sock,str,strlen(str),0);<br />
}</p>
<p>int main(void)<br />
{<br />
&nbsp;WSADATA&nbsp; wsaData;<br />
&nbsp;SOCKET&nbsp; sock;<br />
&nbsp;SOCKADDR_IN tcpaddr;<br />
&nbsp;hostent * remoteHost;<br />
&nbsp;char&nbsp;&nbsp; host[] = {"www.hao123.com"};&nbsp;&nbsp;&nbsp;&nbsp; //主机名就直接写了 <br />
&nbsp;int&nbsp;&nbsp; Ret,l;<br />
&nbsp;BOOL&nbsp; done;<br />
&nbsp;int&nbsp;&nbsp; port = 80;<br />
&nbsp;int&nbsp;&nbsp; chars = 0;<br />
&nbsp;char&nbsp; buffer[512];</p>
<p>&nbsp;if( (Ret = WSAStartup(MAKEWORD(1,1), &amp;wsaData) ) != 0 )<br />
&nbsp;{<br />
&nbsp; printf("WSAStartup failed with error %d\n", Ret);<br />
&nbsp; return 1;<br />
&nbsp;}</p>
<p>&nbsp;if( (remoteHost = gethostbyname(host)) == NULL )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //通过主机名获取地址<br />
&nbsp;{<br />
&nbsp; printf("gethostbyname error!\n");<br />
&nbsp; return 1;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;sock = socket (AF_INET, SOCK_STREAM, 0);<br />
&nbsp;<br />
&nbsp;tcpaddr.sin_family = AF_INET;<br />
&nbsp;tcpaddr.sin_port = htons( (unsigned short)port );<br />
&nbsp;tcpaddr.sin_addr.s_addr = *((unsigned long *)*remoteHost-&gt;h_addr_list);&nbsp; //转换地址</p>
<p>&nbsp;if( connect(sock, (const sockaddr * )&amp;tcpaddr, sizeof(tcpaddr)) )<br />
&nbsp;{<br />
&nbsp; printf("connect error!");<br />
&nbsp; return 1;<br />
&nbsp;}<br />
//这里是要发送的http头部<br />
&nbsp;SendString(sock,"GET / HTTP/1.1\r\n");<br />
&nbsp;SendString(sock,"Host:www.hao123.com\r\n");<br />
&nbsp;SendString(sock,"Accept: */*\r\n");<br />
&nbsp;SendString(sock,"User-Agent: Mozilla/4.0");<br />
&nbsp;SendString(sock,"(compatible; MSIE 5.00; Windows 98)\r\n");<br />
&nbsp;SendString(sock,"Connection:Keep-Alive\r\n");<br />
&nbsp;SendString(sock,"\r\n");<br />
&nbsp;SendString(sock,"\r\n");//最后要加空行</p>
<p>&nbsp;done = FALSE;<br />
&nbsp;FILE * fp;<br />
&nbsp;fp = fopen("1.txt","w");<br />
//打印并保存http响应的头部<br />
&nbsp;&nbsp;&nbsp; while(!done)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l = recv(sock,buffer,1,0);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(l&lt;0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; done=TRUE;<br />
&nbsp; switch(*buffer)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '\r':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '\n':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(chars==0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; done = TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chars=0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chars++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp; printf("%c",*buffer);<br />
&nbsp; fputc(buffer[0],fp);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>//接收正文部分<br />
&nbsp;int sum = 0;<br />
&nbsp;do<br />
&nbsp;{<br />
&nbsp; l = recv(sock,buffer,sizeof(buffer)-1,0);<br />
&nbsp; if( l &lt; 0 )<br />
&nbsp;&nbsp; break;<br />
&nbsp; sum += l;<br />
&nbsp; *(buffer + l) = 0;<br />
&nbsp; fputs(buffer,fp);<br />
&nbsp;} while( l &gt; 0 );</p>
<p>&nbsp;//这里输出正文部分大小，发现其实和响应消息头部的Content-length大小是一样的<br />
//这样就可以检查是否接受完毕<br />
&nbsp;printf("sum = %d\n",sum);</p>
<p>&nbsp;closesocket(sock);</p>
<p>&nbsp;if( WSACleanup() == SOCKET_ERROR )<br />
&nbsp;{<br />
&nbsp; printf("WSACleanup failed with error %d \n", WSAGetLastError() );<br />
&nbsp;}</p>
<p>&nbsp;return 0;<br />
} </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br />
&nbsp;</p>
<img src ="http://www.blogjava.net/smildlzj/aggbug/161181.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smildlzj/" target="_blank">smildlzj</a> 2007-11-17 10:35 <a href="http://www.blogjava.net/smildlzj/articles/161181.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】c语言[win32 socket篇] </title><link>http://www.blogjava.net/smildlzj/articles/161179.html</link><dc:creator>smildlzj</dc:creator><author>smildlzj</author><pubDate>Sat, 17 Nov 2007 02:13:00 GMT</pubDate><guid>http://www.blogjava.net/smildlzj/articles/161179.html</guid><wfw:comment>http://www.blogjava.net/smildlzj/comments/161179.html</wfw:comment><comments>http://www.blogjava.net/smildlzj/articles/161179.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/smildlzj/comments/commentRss/161179.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/smildlzj/services/trackbacks/161179.html</trackback:ping><description><![CDATA[本来不想写这篇文章的，发现网上真很难找到windows下socket的编程的示例代码。而自己又不能一下仔背过这么多的规范，虽然代码不少也贴上来吧，代码解析就先免一点了，有代码而在网上找解析还是挺简单的，以后也好找点~~
<div>&nbsp; 可能其他方式也能实现，我会一种也差不多了,呵呵。</div>
<div>&nbsp;</div>
<div>有点需要特别注意的，因为我用的是MinGW为C编译器，所以编译的时候需要加上-lwsock32的参数。</div>
<div>如： gcc server.c -o server -lwsock32</div>
<div>&nbsp;</div>
<div>服务器端代码：</div>
<div>#include&lt;stdio.h&gt;<br />
#include&lt;winsock.h&gt;&nbsp;<br />
#pragma comment (lib, "ws2_32.lib")<br />
BOOL InitWinsock();</div>
<div>void main(){<br />
&nbsp;SOCKET socket1;<br />
&nbsp;InitWinsock();<br />
&nbsp;struct sockaddr_in local;<br />
&nbsp;<br />
&nbsp;local.sin_family=AF_INET;<br />
&nbsp;local.sin_port=htons(3490); ///监听端口<br />
&nbsp;local.sin_addr.s_addr=INADDR_ANY; ///本机<br />
&nbsp;memset(local.sin_zero,0,8);<br />
&nbsp;<br />
&nbsp;socket1=socket(AF_INET,SOCK_STREAM,0);</div>
<div>&nbsp;int bind_result = bind(socket1,(struct sockaddr*)&amp;local,sizeof(local));<br />
&nbsp;while (1){<br />
&nbsp;&nbsp;int nlisten = listen(socket1, 10);<br />
&nbsp;&nbsp;&nbsp; printf("Listening......\n");<br />
&nbsp;&nbsp;&nbsp; struct sockaddr_in their_addr;<br />
&nbsp;&nbsp;&nbsp; int nSize = sizeof(their_addr);<br />
&nbsp;&nbsp;&nbsp; int nNewFd = accept(socket1, (struct sockaddr*)&amp;their_addr, &amp;nSize);<br />
&nbsp;&nbsp;printf("Accepted! IP:%s: Port:%d\n", inet_ntoa(their_addr.sin_addr), ntohs(their_addr.sin_port));<br />
&nbsp;&nbsp;Sleep(500);<br />
&nbsp;}<br />
&nbsp;closesocket(socket1);<br />
}</div>
<div><br />
BOOL InitWinsock(){<br />
&nbsp;int Error;<br />
&nbsp;WORD VersionRequested;<br />
&nbsp;WSADATA WsaData;<br />
&nbsp;VersionRequested=MAKEWORD(2,2);<br />
&nbsp;Error=WSAStartup(VersionRequested,&amp;WsaData); //启动WinSock2<br />
&nbsp;if(Error!=0){<br />
&nbsp;&nbsp;return FALSE;<br />
&nbsp;}<br />
&nbsp;else {<br />
&nbsp;&nbsp;if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2){<br />
&nbsp;&nbsp;&nbsp;WSACleanup();<br />
&nbsp;&nbsp;&nbsp;return FALSE;<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;return TRUE;<br />
}</div>
<div>&nbsp;</div>
<div>客户段代码：</div>
<div>#include&lt;stdio.h&gt;<br />
#include&lt;winsock.h&gt;&nbsp;<br />
#pragma comment (lib, "ws2_32.lib")<br />
BOOL InitWinsock();</div>
<div>void main(){<br />
&nbsp;SOCKET socket1;<br />
&nbsp;InitWinsock();<br />
&nbsp;struct sockaddr_in from;<br />
&nbsp;struct sockaddr_in local;<br />
&nbsp;local.sin_family = AF_INET;<br />
&nbsp;local.sin_port = htons(888);<br />
&nbsp;local.sin_addr.s_addr = INADDR_ANY;<br />
&nbsp;int fromlen =sizeof (from);</div>
<div>&nbsp;socket1 = socket(AF_INET,SOCK_STREAM,0);<br />
&nbsp;int nbind = bind(socket1,(struct sockaddr*)&amp;local, sizeof(local));<br />
&nbsp;if (nbind &lt; 0){<br />
&nbsp;&nbsp;printf("error");<br />
&nbsp;&nbsp;exit(1);<br />
&nbsp;}</div>
<div>&nbsp;from.sin_family = AF_INET;<br />
&nbsp;from.sin_port = htons(3490);<br />
&nbsp;from.sin_addr.S_un.S_addr = inet_addr("10.10.110.249");<br />
&nbsp;memset(from.sin_zero, 0, 8);</div>
<div>&nbsp;int nCon = connect(socket1, (struct sockaddr*)&amp; from, sizeof (from));<br />
&nbsp;if (nCon &lt; 0){<br />
&nbsp;&nbsp;printf("error");<br />
&nbsp;&nbsp;exit(1);<br />
&nbsp;}</div>
<div>}</div>
<div>BOOL InitWinsock(){<br />
&nbsp;int Error;<br />
&nbsp;WORD VersionRequested;<br />
&nbsp;WSADATA WsaData;<br />
&nbsp;VersionRequested = MAKEWORD(2,2);<br />
&nbsp;Error = WSAStartup(VersionRequested, &amp;WsaData);<br />
&nbsp;if (Error != 0){<br />
&nbsp;&nbsp;return FALSE;<br />
&nbsp;}<br />
&nbsp;else {<br />
&nbsp;&nbsp;if(LOBYTE(WsaData.wVersion) != 2 || HIBYTE(WsaData.wHighVersion) != 2){<br />
&nbsp;&nbsp;&nbsp;WSACleanup();<br />
&nbsp;&nbsp;&nbsp;return FALSE;<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;return TRUE;<br />
}</div>
<img src ="http://www.blogjava.net/smildlzj/aggbug/161179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/smildlzj/" target="_blank">smildlzj</a> 2007-11-17 10:13 <a href="http://www.blogjava.net/smildlzj/articles/161179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>