??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
char *ecvt(double value,int ndigit,int *decpt,int *sign)
QҎ(gu)value转换成字W串q返回该字符?br />
char *fcvt(double value,int ndigit,int *decpt,int *sign)
QҎ(gu)value转换成字W串q返回该字符?br />
char *gcvt(double value,int ndigit,char *buf)
数value转换成字W串q存于buf?q返回buf的指?br />
char *ultoa(unsigned long value,char *string,int radix)
无W号整型数value转换成字W串q返回该字符?radix{换时所用基?br />
char *ltoa(long value,char *string,int radix)
长整型数value转换成字W串q返回该字符?radix{换时所用基?br />
char *itoa(int value,char *string,int radix)
整数value转换成字W串存入string,radix{换时所用基?br />
double atof(char *nptr) 字W串nptr转换成双_ֺ?q返回这个数,错误q回0
int atoi(char *nptr) 字W串nptr转换成整型数, q返回这个数,错误q回0
long atol(char *nptr) 字W串nptr转换成长整型?q返回这个数,错误q回0
double strtod(char *str,char **endptr)字W串str转换成双_ֺ?q返回这个数,
long strtol(char *str,char **endptr,int base)字W串str转换成长整型?
q返回这个数,
int toascii(int c) q回c相应的ASCII
int tolower(int ch) 若ch是大写字?'A'-'Z')q回相应的小写字?'a'-'z')
int _tolower(int ch) q回ch相应的小写字?'a'-'z')
int toupper(int ch) 若ch是小写字?'a'-'z')q回相应的大写字?'A'-'Z')
int _toupper(int ch) q回ch相应的大写字?'A'-'Z')
诊断函数,所在函数库为assert.h、math.h
void assert(int test) 一个扩展成if语句那样的宏Q如果test试p|Q?br />
显CZ个信息ƈ异常l止E序,无返回?br />
void perror(char *string) 本函数将昄最q一ơ的错误信息Q格式如下:
字符串string:错误信息
char *strerror(char *str) 本函数返回最q一ơ的错误信息,格式如下:
字符串str:错误信息
int matherr(struct exception *e)
用户修改数学错误q回信息函数(没有必要使用)
double _matherr(_mexcep why,char *fun,double *arg1p,
double *arg2p,double retval)
用户修改数学错误q回信息函数(没有必要使用)
输入输出子程?函数库ؓio.h、conio.h、stat.h、dos.h、stdio.h、signal.h
int kbhit() 本函数返回最q所敲的按键
int fgetchar() 从控制台(键盘)M个字W,昄在屏q上
int getch() 从控制台(键盘)M个字W,不显C在屏幕?br />
int putch() 向控制台(键盘)写一个字W?br />
int getchar() 从控制台(键盘)M个字W,昄在屏q上
int putchar() 向控制台(键盘)写一个字W?br />
int getche() 从控制台(键盘)M个字W,昄在屏q上
int ungetch(int c) 把字Wc退回给控制?键盘)
char *cgets(char *string) 从控制台(键盘)d字符串存于string?br />
int scanf(char *format[,argument…])从控制台d一个字W串,分别对各个参数进?br />
赋?使用BIOSq行输出
int vscanf(char *format,Valist param)从控制台d一个字W串,分别对各个参数进?br />
赋?使用BIOSq行输出,参数从Valist param中取?br />
int cscanf(char *format[,argument…])从控制台d一个字W串,分别对各个参数进?br />
赋?直接Ҏ(gu)制台作操?比如昄器在昄时字W时即ؓ直接写频方式昄
int sscanf(char *string,char *format[,argument,…])通过字符串string,分别对各?br />
参数q行赋?br />
int vsscanf(char *string,char *format,Vlist param)通过字符串string,分别对各?br />
参数q行赋?参数从Vlist param中取?br />
int puts(char *string) 发关一个字W串stringl控制台(昄?,
使用BIOSq行输出
void cputs(char *string) 发送一个字W串stringl控制台(昄?,
直接Ҏ(gu)制台作操?比如昄器即为直接写频方式显C?br />
int printf(char *format[,argument,…]) 发送格式化字符串输出给控制?昄?
使用BIOSq行输出
int vprintf(char *format,Valist param) 发送格式化字符串输出给控制?昄?
使用BIOSq行输出,参数从Valist param中取?br />
int cprintf(char *format[,argument,…]) 发送格式化字符串输出给控制?昄?,
直接Ҏ(gu)制台作操?比如昄器即为直接写频方式显C?br />
int vcprintf(char *format,Valist param)发送格式化字符串输出给控制?昄?,
直接Ҏ(gu)制台作操?比如昄器即为直接写频方式显C?
参数从Valist param中取?br />
int sprintf(char *string,char *format[,argument,…])
字W串string的内定w新写为格式化后的字符?br />
int vsprintf(char *string,char *format,Valist param)
字W串string的内定w新写为格式化后的字符?参数从Valist param中取?br />
int rename(char *oldname,char *newname)文件oldname的名U改为newname
int ioctl(int handle,int cmd[,int *argdx,int argcx])
本函数是用来控制输入/输出讑֤的,误下表Q?br />
┌───┬────────────────────────────?br />
│cmd?│功?nbsp; ?br />
├───┼────────────────────────────?br />
?nbsp; 0 │取备信?nbsp; ?br />
?nbsp; 1 │设|设备信?nbsp; ?br />
?nbsp; 2 │把argcx字节d由argdx所指的地址 ?br />
?nbsp; 3 │在argdx所指的地址写argcx字节 ?br />
?nbsp; 4 │除把handle当作讑֤?0=当前,1=A,{?之外,均和cmd=2时一??br />
?nbsp; 5 │除把handle当作讑֤?0=当前,1=A,{?之外,均和cmd=3时一??br />
?nbsp; 6 │取输入状?nbsp; ?br />
?nbsp; 7 │取输出状?nbsp; ?br />
?nbsp; 8 │测试可换?只对于DOS 3.x ?br />
?nbsp; 11 │置分n冲突的重计?只对DOS 3.x ?br />
└───┴────────────────────────────?br />
int (*ssignal(int sig,int(*action)())()执行软g信号(没必要?
int gsignal(int sig) 执行软g信号(没必要?
int _open(char *pathname,int access)或写打开一个文?
按后按access来确定是L件还是写文g,accessD下表
┌──────┬────────────────────?br />
│access?nbsp; │意?nbsp; ?br />
├──────┼────────────────────?br />
│O_RDONLY │读文g ?br />
│O_WRONLY │写文g ?br />
│O_RDWR │即M?nbsp; ?br />
│O_NOINHERIT │若文g没有传递给子程?则被包含 ?br />
│O_DENYALL │只允许当前处理必须存取的文?nbsp; ?br />
│O_DENYWRITE │只允许从Q何其它打开的文件读 ?br />
│O_DENYREAD │只允许从Q何其它打开的文件写 ?br />
│O_DENYNONE │允许其它共享打开的文?nbsp; ?br />
└──────┴────────────────────?br />
int open(char *pathname,int access[,int permiss])或写打开一个文?
按后按access来确定是L件还是写文g,accessD下表
┌────┬────────────────────?br />
│access值│意义 ?br />
├────┼────────────────────?br />
│O_RDONLY│读文g ?br />
│O_WRONLY│写文g ?br />
│O_RDWR │即M?nbsp; ?br />
│O_NDELAY│没有?对UNIXpȝ兼容 ?br />
│O_APPEND│即M?但每ơ写L在文件尾d ?br />
│O_CREAT │若文g存在,此标志无?若不存在,建新文g ?br />
│O_TRUNC │若文g存在,则长度被截ؓ0,属性不?nbsp; ?br />
│O_EXCL │未?对UNIXpȝ兼容 ?br />
│O_BINARY│此标志可显C地l出以二q制方式打开文g ?br />
│O_TEXT │此标志可用于显C地l出以文本方式打开文g?br />
└────┴────────────────────?br />
permiss为文件属?可ؓ以下?
S_IWRITE允许?nbsp; S_IREAD允许?nbsp; S_IREAD|S_IWRITE允许诅R写
int creat(char *filename,int permiss) 建立一个新文gfilenameQƈ讑֮
d性。permiss为文件读写性,可以Z下?br />
S_IWRITE允许?nbsp; S_IREAD允许?nbsp; S_IREAD|S_IWRITE允许诅R写
int _creat(char *filename,int attrib) 建立一个新文gfilenameQƈ讑֮文g
属性。attrib为文件属性,可以Z下?br />
FA_RDONLY只读 FA_HIDDEN隐藏 FA_SYSTEMpȝ
int creatnew(char *filenamt,int attrib) 建立一个新文gfilenameQƈ讑֮文g
属性。attrib为文件属性,可以Z下?br />
FA_RDONLY只读 FA_HIDDEN隐藏 FA_SYSTEMpȝ
int creattemp(char *filenamt,int attrib) 建立一个新文gfilenameQƈ讑֮文g
属性。attrib为文件属性,可以Z下?br />
FA_RDONLY只读 FA_HIDDEN隐藏 FA_SYSTEMpȝ
int read(int handle,void *buf,int nbyte)从文件号为handle的文件中读nbyte个字W?br />
存入buf?br />
int _read(int handle,void *buf,int nbyte)从文件号为handle的文件中读nbyte个字W?br />
存入buf?直接调用MSDOSq行操作.
int write(int handle,void *buf,int nbyte)buf中的nbyte个字W写入文件号
为handle的文件中
int _write(int handle,void *buf,int nbyte)buf中的nbyte个字W写入文件号
为handle的文件中
int dup(int handle) 复制一个文件处理指针handle,q回q个指针
int dup2(int handle,int newhandle) 复制一个文件处理指针handle到newhandle
int eof(int *handle)查文件是否结?l束q回1,否则q回0
long filelength(int handle) q回文g长度Qhandle为文件号
int setmode(int handle,unsigned mode)本函数用来设定文件号为handle的文件的?br />
开方式
int getftime(int handle,struct ftime *ftime) d文g号ؓhandle的文件的旉Q?br />
q将文g旉存于ftimel构中,成功q回0,ftimel构如下Q?br />
┌─────────────────?br />
│struct ftime ?br />
│{ ?br />
?unsigned ft_tsec:5; /*U?/ ?br />
?unsigned ft_min:6; /*?/ ?br />
?unsigned ft_hour:5; /*?/ ?br />
?unsigned ft_day:5; /*?/ ?br />
?unsigned ft_month:4;/*?/ ?br />
?unsigned ft_year:1; /*q?1980*/ ?br />
│} ?br />
└─────────────────?br />
int setftime(int handle,struct ftime *ftime) 重写文g号ؓhandle的文件时?
新时间在l构ftime?成功q回0.l构ftime如下:
┌─────────────────?br />
│struct ftime ?br />
│{ ?br />
?unsigned ft_tsec:5; /*U?/ ?br />
?unsigned ft_min:6; /*?/ ?br />
?unsigned ft_hour:5; /*?/ ?br />
?unsigned ft_day:5; /*?/ ?br />
?unsigned ft_month:4;/*?/ ?br />
?unsigned ft_year:1; /*q?1980*/ ?br />
│} ?br />
└─────────────────?br />
long lseek(int handle,long offset,int fromwhere) 本函数将文g号ؓhandle的文?br />
的指针移到fromwhere后的Woffset个字节处.
SEEK_SET 文g开?nbsp; SEEK_CUR 当前位置 SEEK_END 文g?br />
long tell(int handle) 本函数返回文件号为handle的文件指?以字节表C?br />
int isatty(int handle)本函数用来取讑֤handle的类?br />
int lock(int handle,long offset,long length) Ҏ(gu)件共享作锁
int unlock(int handle,long offset,long length) 打开Ҏ(gu)件共享的锁
int close(int handle) 关闭h(hun)andle所表示的文件处?handle是从_creat、creat?br />
creatnew、creattemp、dup、dup2、_open、open中的一个处调用获得的文件处?br />
成功q回0否则q回-1,可用于UNIXpȝ
int _close(int handle) 关闭h(hun)andle所表示的文件处?handle是从_creat、creat?br />
creatnew、creattemp、dup、dup2、_open、open中的一个处调用获得的文件处?br />
成功q回0否则q回-1,只能用于MSDOSpȝ
FILE *fopen(char *filename,char *type) 打开一个文件filename,打开方式为typeQ?br />
q返回这个文件指针,type可ؓ以下字符串加上后~
┌──┬────┬───────┬────────?br />
│type│读写?nbsp; │文?2q制文g│徏?打开旧文??br />
├──┼────┼───────┼────────?br />
│r │读 │文?nbsp; │打开旧的文g ?br />
│w │写 │文?nbsp; │徏新文?nbsp; ?br />
│a │添?nbsp; │文?nbsp; │有打开无则建新?br />
│r+ │读/?nbsp; │不限制 │打开 ?br />
│w+ │读/?nbsp; │不限制 │徏新文?nbsp; ?br />
│a+ │读/d │不限制 │有打开无则建新?br />
└──┴────┴───────┴────────?br />
可加的后~为t、b。加b表示文g以二q制形式q行操作Qt没必要?br />
? ┌──────────────────?br />
?include<stdio.h> ?br />
│main() ?br />
│{ ?br />
?FILE *fp; ?br />
?fp=fopen("C:\\WPS\\WPS.EXE","r+b");?br />
└──────────────────?br />
FILE *fdopen(int ahndle,char *type)
FILE *freopen(char *filename,char *type,FILE *stream)
int getc(FILE *stream) 从流stream中读一个字W,q返回这个字W?br />
int putc(int ch,FILE *stream)向流stream写入一个字Wch
int getw(FILE *stream) 从流streamd一个整敎ͼ错误q回EOF
int putw(int w,FILE *stream)向流stream写入一个整?br />
int ungetc(char c,FILE *stream) 把字Wc退回给streamQ下一ơ读q的字符是c
int fgetc(FILE *stream) 从流stream处读一个字W,q返回这个字W?br />
int fputc(int ch,FILE *stream) 字Wch写入stream?br />
char *fgets(char *string,int n,FILE *stream) 从流stream中读n个字W存入string?br />
int fputs(char *string,FILE *stream) 字W串string写入stream?br />
int fread(void *ptr,int size,int nitems,FILE *stream) 从流stream中读入nitems
个长度ؓsize的字W串存入ptr?br />
int fwrite(void *ptr,int size,int nitems,FILE *stream) 向流stream中写入nitems
个长度ؓsize的字W串,字符串在ptr?br />
int fscanf(FILE *stream,char *format[,argument,…]) 以格式化形式从流stream?br />
d一个字W串
int vfscanf(FILE *stream,char *format,Valist param) 以格式化形式从流stream?br />
d一个字W串,参数从Valist param中取?br />
int fprintf(FILE *stream,char *format[,argument,…]) 以格式化形式一个字W?br />
串写l指定的stream
int vfprintf(FILE *stream,char *format,Valist param) 以格式化形式一个字W?br />
串写l指定的stream,参数从Valist param中取?br />
int fseek(FILE *stream,long offset,int fromwhere) 函数把文件指针移到fromwhere
所指位|的向后offset个字节处,fromwhere可以Z下?
SEEK_SET 文g开?nbsp; SEEK_CUR 当前位置 SEEK_END 文g?br />
long ftell(FILE *stream) 函数q回定位在stream中的当前文g指针位置,以字节表C?br />
int rewind(FILE *stream) 当前文件指针streamUd文g开?br />
int feof(FILE *stream) 流stream上的文g指针是否在结束位|?br />
int fileno(FILE *stream) 取流stream上的文g处理Qƈq回文g处理
int ferror(FILE *stream) 流stream上是否有d错误Q如有错误就q回1
void clearerr(FILE *stream) 清除stream上的d错误
void setbuf(FILE *stream,char *buf) l流stream指定一个缓冲区buf
void setvbuf(FILE *stream,char *buf,int type,unsigned size)
l流stream指定一个缓冲区buf,大小为size,cd为type,type的D下表
┌───┬───────────────────────────────?br />
│type值│意义 ?br />
├───┼───────────────────────────────?br />
│_IOFBF│文件是完全~冲?当缓冲区是空?下一个输入操作将企图填满整个~│
?nbsp; │冲?在输出时,在把M数据写到文g之前,完全填充缓冲区. ?br />
│_IOLBF│文件是行缓冲区.当缓冲区为空?下一个输入操作将仍然企图填整个缓?br />
?nbsp; │冲?然而在输出?每当新行W写到文?~冲区就被清z掉. ?br />
│_IONBF│文件是无缓冲的.buf和size参数是被忽略?每个输入操作直接从??br />
?nbsp; │g?每个输出操作立x数据写到文g? ?br />
└───┴───────────────────────────────?br />
int fclose(FILE *stream) 关闭一个流Q可以是文g或设?例如LPT1)
int fcloseall() 关闭所有除stdin或stdout外的?br />
int fflush(FILE *stream) 关闭一个流Qƈ对缓冲区作处?br />
处理卛_ȝ,流内内容读入缓冲区Q?br />
对写的流Q将~冲区内内容写入。成功返?
int fflushall() 关闭所有流QƈҎ(gu)各自的缓冲区作处?br />
处理卛_ȝ,流内内容读入缓冲区Q?br />
对写的流Q将~冲区内内容写入。成功返?
int access(char *filename,int amode) 本函数检查文件filenameq返回文件的属?
函数属性存于amode中,amode׃下位的组合构?br />
06可以诅R写 04可以?nbsp; 02可以?nbsp; 01执行(忽略? 00文g存在
如果filename是一个目?函数只定目录是否存在
函数执行成功q回0,否则q回-1
int chmod(char *filename,int permiss) 本函数用于设定文件filename的属?br />
permiss可以Z下?br />
S_IWRITE允许?nbsp; S_IREAD允许?nbsp; S_IREAD|S_IWRITE允许诅R写
int _chmod(char *filename,int func[,int attrib]);
本函数用于读取或讑֮文gfilename的属性,
当func=0Ӟ函数q回文g的属性;当func=1Ӟ函数讑֮文g的属?br />
若ؓ讑֮文g属性,attrib可以Z列常C一
FA_RDONLY只读 FA_HIDDEN隐藏 FA_SYSTEMpȝ
void SendString(SOCKET sock,LPCSTR str)
{
send(sock,str,strlen(str),0);
}
int main(void)
{
WSADATA wsaData;
SOCKET sock;
SOCKADDR_IN tcpaddr;
hostent * remoteHost;
char host[] = {"www.hao123.com"}; //L名就直接写了
int Ret,l;
BOOL done;
int port = 80;
int chars = 0;
char buffer[512];
if( (Ret = WSAStartup(MAKEWORD(1,1), &wsaData) ) != 0 )
{
printf("WSAStartup failed with error %d\n", Ret);
return 1;
}
if( (remoteHost = gethostbyname(host)) == NULL ) //通过L名获取地址
{
printf("gethostbyname error!\n");
return 1;
}
sock = socket (AF_INET, SOCK_STREAM, 0);
tcpaddr.sin_family = AF_INET;
tcpaddr.sin_port = htons( (unsigned short)port );
tcpaddr.sin_addr.s_addr = *((unsigned long *)*remoteHost->h_addr_list); //转换地址
if( connect(sock, (const sockaddr * )&tcpaddr, sizeof(tcpaddr)) )
{
printf("connect error!");
return 1;
}
//q里是要发送的http头部
SendString(sock,"GET / HTTP/1.1\r\n");
SendString(sock,"Host:www.hao123.com\r\n");
SendString(sock,"Accept: */*\r\n");
SendString(sock,"User-Agent: Mozilla/4.0");
SendString(sock,"(compatible; MSIE 5.00; Windows 98)\r\n");
SendString(sock,"Connection:Keep-Alive\r\n");
SendString(sock,"\r\n");
SendString(sock,"\r\n");//最后要加空?/p>
done = FALSE;
FILE * fp;
fp = fopen("1.txt","w");
//打印q保存http响应的头?br />
while(!done)
{
l = recv(sock,buffer,1,0);
if(l<0)
done=TRUE;
switch(*buffer)
{
case '\r':
break;
case '\n':
if(chars==0)
done = TRUE;
chars=0;
break;
default:
chars++;
break;
}
printf("%c",*buffer);
fputc(buffer[0],fp);
}
//接收正文部分
int sum = 0;
do
{
l = recv(sock,buffer,sizeof(buffer)-1,0);
if( l < 0 )
break;
sum += l;
*(buffer + l) = 0;
fputs(buffer,fp);
} while( l > 0 );
//q里输出正文部分大小Q发现其实和响应消息头部的Content-length大小是一L(fng)
//q样可以检查是否接受完?br />
printf("sum = %d\n",sum);
closesocket(sock);
if( WSACleanup() == SOCKET_ERROR )
{
printf("WSACleanup failed with error %d \n", WSAGetLastError() );
}
return 0;
}