C语言函数之二

来源:互联网 发布:淘宝国产高达禁卖 编辑:程序博客网 时间:2024/05/26 07:29

目录函数,所在函数库为dir.h、dos.h

int chdir(char *path) 使指定的目录path(如:"C:\\WPS")变成当前的工作目录,成功返回0

int findfirst(char *pathname,struct ffblk *ffblk,int attrib)查找指定的文件,成功返回0 pathname为指定的目录名和文件名,如"C:\\WPS\\TXT"
ffblk为指定的保存文件信息的一个结构,定义如下:
┏━━━━━━━━━━━━━━━━━━┓
┃struct ffblk ┃
┃{ ┃
┃ char ff_reserved[21]; /*DOS保留字*/┃
┃ char ff_attrib; /*文件属性*/ ┃
┃ int ff_ftime; /*文件时间*/ ┃
┃ int ff_fdate; /*文件日期*/ ┃
┃ long ff_fsize; /*文件长度*/ ┃
┃ char ff_name[13]; /*文件名*/ ┃
┃} ┃
┗━━━━━━━━━━━━━━━━━━┛
attrib为文件属性,由以下字符代表
┏━━━━━━━━━┳━━━━━━━━┓
┃FA_RDONLY 只读文件┃FA_LABEL 卷标号┃
┃FA_HIDDEN 隐藏文件┃FA_DIREC 目录 ┃
┃FA_SYSTEM 系统文件┃FA_ARCH 档案 ┃
┗━━━━━━━━━┻━━━━━━━━┛
例:
struct ffblk ff;
findfirst("*.wps",&ff,FA_RDONLY);

int findnext(struct ffblk *ffblk) 取匹配finddirst的文件,成功返回0

void fumerge(char *path,char *drive,char *dir,char *name,char *ext)此函数通过盘符drive(C:、A:等),路径dir(\TC、\BC\LIB等),文件名name(TC、WPS等),扩展名ext(.EXE、.COM等)组成一个文件名存与path中.

int fnsplit(char *path,char *drive,char *dir,char *name,char *ext)此函数将文件名path分解成盘符drive(C:、A:等),路径dir(\TC、\BC\LIB等),文件名name(TC、WPS等),扩展名ext(.EXE、.COM等),并分别存入相应的变量中.

int getcurdir(int drive,char *direc) 此函数返回指定驱动器的当前工作目录名称
drive 指定的驱动器(0=当前,1=A,2=B,3=C等)
direc 保存指定驱动器当前工作路径的变量 成功返回0

char *getcwd(char *buf,iint n) 此函数取当前工作目录并存入buf中,直到n个字节长为为止.错误返回NULL

int getdisk() 取当前正在使用的驱动器,返回一个整数(0=A,1=B,2=C等)

int setdisk(int drive) 设置要使用的驱动器drive(0=A,1=B,2=C等),返回可使用驱动器总数

int mkdir(char *pathname) 建立一个新的目录pathname,成功返回0

int rmdir(char *pathname) 删除一个目录pathname,成功返回0

char *mktemp(char *template) 构造一个当前目录上没有的文件名并存于template中

char *searchpath(char *pathname) 利用MSDOS找出文件filename所在路径,,此函数使用DOS的PATH变量,未找到文件返回NULL

进程函数,所在函数库为stdlib.h、process.h

void abort() 此函数通过调用具有出口代码3的_exit写一个终止信息于stderr,并异常终止程序。无返回值

int exec…装入和运行其它程序

int execl( char *pathname,char *arg0,char *arg1,…,char *argn,NULL)

int execle( char *pathname,char *arg0,char *arg1,…,

char *argn,NULL,char *envp[])

int execlp( char *pathname,char *arg0,char *arg1,…,NULL)

int execlpe(char *pathname,char *arg0,char *arg1,…,NULL,char *envp[])

int execv( char *pathname,char *argv[])

int execve( char *pathname,char *argv[],char *envp[])


int execvp( char *pathname,char *argv[])


int execvpe(char *pathname,char *argv[],char *envp[])

exec函数族装入并运行程序pathname,并将参数arg0(arg1,arg2,argv[],envp[])传递给子程序,出错返回-1
在exec函数族中,后缀l、v、p、e添加到exec后,所指定的函数将具有某种操作能力
有后缀 p时,函数可以利用DOS的PATH变量查找子程序文件。
l时,函数中被传递的参数个数固定。
v时,函数中被传递的参数个数不固定。
e时,函数传递指定参数envp,允许改变子进程的环境,
无后缀e时,子进程使用当前程序的环境。

void _exit(int status)终止当前程序,但不清理现场

void exit(int status) 终止当前程序,关闭所有文件,写缓冲区的输出(等待输出),并调用任何寄存器的"出口函数",无返回值

int spawn…运行子程序

int spawnl( int mode,char *pathname,char *arg0,char *arg1,…,

char *argn,NULL)

int spawnle( int mode,char *pathname,char *arg0,char *arg1,…,

char *argn,NULL,char *envp[])

int spawnlp( int mode,char *pathname,char *arg0,char *arg1,…,

char *argn,NULL)


int spawnlpe(int mode,char *pathname,char *arg0,char *arg1,…,

char *argn,NULL,char *envp[])

int spawnv( int mode,char *pathname,char *argv[])

int spawnve( int mode,char *pathname,char *argv[],char *envp[])

int spawnvp( int mode,char *pathname,char *argv[])

int spawnvpe(int mode,char *pathname,char *argv[],char *envp[])
spawn函数族在mode模式下运行子程序pathname,并将参数arg0(arg1,arg2,argv[],envp[])传递给子程序.出错返回-1
mode为运行模式
mode为 P_WAIT 表示在子程序运行完后返回本程序
P_NOWAIT 表示在子程序运行时同时运行本程序(不可用)
P_OVERLAY表示在本程序退出后运行子程序
在spawn函数族中,后缀l、v、p、e添加到spawn后,所指定的函数将具有某种操作能力
有后缀 p时, 函数利用DOS的PATH查找子程序文件
l时, 函数传递的参数个数固定.
v时, 函数传递的参数个数不固定.
e时, 指定参数envp可以传递给子程序,允许改变子程序运行环境.
当无后缀e时,子程序使用本程序的环境.

int system(char *command) 将MSDOS命令command传递给DOS执行

转换子程序,函数库为math.h、stdlib.h、ctype.h、float.h

char *ecvt(double value,int ndigit,int *decpt,int *sign)
将浮点数value转换成字符串并返回该字符串

char *fcvt(double value,int ndigit,int *decpt,int *sign)
将浮点数value转换成字符串并返回该字符串

char *gcvt(double value,int ndigit,char *buf)
将数value转换成字符串并存于buf中,并返回buf的指针

char *ultoa(unsigned long value,char *string,int radix)
将无符号整型数value转换成字符串并返回该字符串,radix为转换时所用基数

char *ltoa(long value,char *string,int radix)
将长整型数value转换成字符串并返回该字符串,radix为转换时所用基数

char *itoa(int value,char *string,int radix)
将整数value转换成字符串存入string,radix为转换时所用基数

double atof(char *nptr) 将字符串nptr转换成双精度数,并返回这个数,错误返回0

int atoi(char *nptr) 将字符串nptr转换成整型数, 并返回这个数,错误返回0

long atol(char *nptr) 将字符串nptr转换成长整型数,并返回这个数,错误返回0

double strtod(char *str,char **endptr)将字符串str转换成双精度数,并返回这个数,

long strtol(char *str,char **endptr,int base)将字符串str转换成长整型数,并返回这个数,

int toascii(int c) 返回c相应的ASCII

int tolower(int ch) 若ch是大写字母('A'-'Z')返回相应的小写字母('a'-'z')

int _tolower(int ch) 返回ch相应的小写字母('a'-'z')

int toupper(int ch) 若ch是小写字母('a'-'z')返回相应的大写字母('A'-'Z')


int _toupper(int ch) 返回ch相应的大写字母('A'-'Z')

诊断函数,所在函数库为assert.h、math.h

void assert(int test) 一个扩展成if语句那样的宏,如果test测试失败,就显示一个信息并异常终止程序,无返回值

void perror(char *string) 本函数将显示最近一次的错误信息,格式如下:字符串string:错误信息

char *strerror(char *str) 本函数返回最近一次的错误信息,格式如下:字符串str:错误信息

int matherr(struct exception *e) 用户修改数学错误返回信息函数(没有必要使用)

double _matherr(_mexcep why,char *fun,double *arg1p,double *arg2p,double retval)
用户修改数学错误返回信息函数(没有必要使用)

输入输出子程序,函数库为io.h、conio.h、stat.h、dos.h、stdio.h、signal.h

int kbhit() 本函数返回最近所敲的按键

int fgetchar() 从控制台(键盘)读一个字符,显示在屏幕上

int getch() 从控制台(键盘)读一个字符,不显示在屏幕上


int putch() 向控制台(键盘)写一个字符

int getchar() 从控制台(键盘)读一个字符,显示在屏幕上

int putchar() 向控制台(键盘)写一个字符

int getche() 从控制台(键盘)读一个字符,显示在屏幕上

int ungetch(int c) 把字符c退回给控制台(键盘)

char *cgets(char *string) 从控制台(键盘)读入字符串存于string中

int scanf(char *format[,argument…])从控制台读入一个字符串,分别对各个参数进行赋值,使用BIOS进行输出

int vscanf(char *format,Valist param)从控制台读入一个字符串,分别对各个参数进行赋值,使用BIOS进行输出,参数从Valist param中取得

int cscanf(char *format[,argument…])从控制台读入一个字符串,分别对各个参数进行赋值,直接对控制台作操作,比如显示器在显示时字符时即为直接写频方式显示

int sscanf(char *string,char *format[,argument,…])通过字符串string,分别对各个参数进行赋值

int vsscanf(char *string,char *format,Vlist param)通过字符串string,分别对各个参数进行赋值,参数从Vlist param中取得

int puts(char *string) 发关一个字符串string给控制台(显示器),使用BIOS进行输出

void cputs(char *string) 发送一个字符串string给控制台(显示器),直接对控制台作操作,比如显示器即为直接写频方式显示

int printf(char *format[,argument,…]) 发送格式化字符串输出给控制台(显示器)使用BIOS进行输出

int vprintf(char *format,Valist param) 发送格式化字符串输出给控制台(显示器)使用BIOS进行输出,参数从Valist param中取得

int cprintf(char *format[,argument,…]) 发送格式化字符串输出给控制台(显示器),直接对控制台作操作,比如显示器即为直接写频方式显示

int vcprintf(char *format,Valist param)发送格式化字符串输出给控制台(显示器),直接对控制台作操作,比如显示器即为直接写频方式显示,
参数从Valist param中取得

int sprintf(char *string,char *format[,argument,…])将字符串string的内容重新写为格式化后的字符串

int vsprintf(char *string,char *format,Valist param)将字符串string的内容重新写为格式化后的字符串,参数从Valist param中取得

int rename(char *oldname,char *newname)将文件oldname的名称改为newname

int ioctl(int handle,int cmd[,int *argdx,int argcx])本函数是用来控制输入/输出设备的,请见下表:
┌───┬────────────────────────────┐
│cmd值 │功能 │
├───┼────────────────────────────┤
│ 0 │取出设备信息 │
│ 1 │设置设备信息 │
│ 2 │把argcx字节读入由argdx所指的地址 │
│ 3 │在argdx所指的地址写argcx字节 │
│ 4 │除把handle当作设备号(0=当前,1=A,等)之外,均和cmd=2时一样 │
│ 5 │除把handle当作设备号(0=当前,1=A,等)之外,均和cmd=3时一样 │
│ 6 │取输入状态 │
│ 7 │取输出状态 │
│ 8 │测试可换性;只对于DOS 3.x │
│ 11 │置分享冲突的重算计数;只对DOS 3.x │
└───┴────────────────────────────┘

int (*ssignal(int sig,int(*action)())()执行软件信号(没必要使用)

int gsignal(int sig) 执行软件信号(没必要使用)

int _open(char *pathname,int access)为读或写打开一个文件,
按后按access来确定是读文件还是写文件,access值见下表
┌──────┬────────────────────┐
│access值 │意义 │
├──────┼────────────────────┤
│O_RDONLY │读文件 │
│O_WRONLY │写文件 │
│O_RDWR │即读也写 │
│O_NOINHERIT │若文件没有传递给子程序,则被包含 │
│O_DENYALL │只允许当前处理必须存取的文件 │
│O_DENYWRITE │只允许从任何其它打开的文件读 │
│O_DENYREAD │只允许从任何其它打开的文件写 │
│O_DENYNONE │允许其它共享打开的文件 │
└──────┴────────────────────┘
int open(char *pathname,int access[,int permiss])为读或写打开一个文件,
按后按access来确定是读文件还是写文件,access值见下表
┌────┬────────────────────┐
│access值│意义 │
├────┼────────────────────┤
│O_RDONLY│读文件 │
│O_WRONLY│写文件 │
│O_RDWR │即读也写 │
│O_NDELAY│没有使用;对UNIX系统兼容 │
│O_APPEND│即读也写,但每次写总是在文件尾添加 │
│O_CREAT │若文件存在,此标志无用;若不存在,建新文件 │
│O_TRUNC │若文件存在,则长度被截为0,属性不变 │
│O_EXCL │未用;对UNIX系统兼容 │
│O_BINARY│此标志可显示地给出以二进制方式打开文件 │
│O_TEXT │此标志可用于显示地给出以文本方式打开文件│
└────┴────────────────────┘
permiss为文件属性,可为以下值:
S_IWRITE允许写 S_IREAD允许读 S_IREAD|S_IWRITE允许读、写

int creat(char *filename,int permiss) 建立一个新文件filename,并设定读写性。permiss为文件读写性,可以为以下值S_IWRITE允许写 S_IREAD允许读 S_IREAD|S_IWRITE允许读、写

int _creat(char *filename,int attrib) 建立一个新文件filename,并设定文件属性。attrib为文件属性,可以为以下值FA_RDONLY只读 FA_HIDDEN隐藏 FA_SYSTEM系统

int creatnew(char *filenamt,int attrib) 建立一个新文件filename,并设定文件属性。attrib为文件属性,可以为以下值FA_RDONLY只读 FA_HIDDEN隐藏 FA_SYSTEM系统

int creattemp(char *filenamt,int attrib) 建立一个新文件filename,并设定文件属性。attrib为文件属性,可以为以下值FA_RDONLY只读 FA_HIDDEN隐藏 FA_SYSTEM系统

int read(int handle,void *buf,int nbyte)从文件号为handle的文件中读nbyte个字符存入buf中

int _read(int handle,void *buf,int nbyte)从文件号为handle的文件中读nbyte个字符存入buf中,直接调用MSDOS进行操作.

int write(int handle,void *buf,int nbyte)将buf中的nbyte个字符写入文件号为handle的文件中

int _write(int handle,void *buf,int nbyte)将buf中的nbyte个字符写入文件号为handle的文件中

int dup(int handle) 复制一个文件处理指针handle,返回这个指针

int dup2(int handle,int newhandle) 复制一个文件处理指针handle到newhandle

int eof(int *handle)检查文件是否结束,结束返回1,否则返回0

long filelength(int handle) 返回文件长度,handle为文件号


int setmode(int handle,unsigned mode)本函数用来设定文件号为handle的文件的打开方式


int getftime(int handle,struct ftime *ftime) 读取文件号为handle的文件的时间,并将文件时间存于ftime结构中,成功返回0,ftime结构如下:
┌─────────────────┐
│struct ftime │
│{ │
│ unsigned ft_tsec:5; /*秒*/ │
│ unsigned ft_min:6; /*分*/ │
│ unsigned ft_hour:5; /*时*/ │
│ unsigned ft_day:5; /*日*/ │
│ unsigned ft_month:4;/*月*/ │
│ unsigned ft_year:1; /*年-1980*/ │
│} │
└─────────────────┘
int setftime(int handle,struct ftime *ftime) 重写文件号为handle的文件时间,
新时间在结构ftime中.成功返回0.结构ftime如下:
┌─────────────────┐
│struct ftime │
│{ │
│ unsigned ft_tsec:5; /*秒*/ │
│ unsigned ft_min:6; /*分*/ │
│ unsigned ft_hour:5; /*时*/ │
│ unsigned ft_day:5; /*日*/ │
│ unsigned ft_month:4;/*月*/ │
│ unsigned ft_year:1; /*年-1980*/ │
│} │
└─────────────────┘
long lseek(int handle,long offset,int fromwhere) 本函数将文件号为handle的文件的指针移到fromwhere后的第offset个字节处.SEEK_SET 文件开关 SEEK_CUR 当前位置 SEEK_END 文件尾

long tell(int handle) 本函数返回文件号为handle的文件指针,以字节表示

int isatty(int handle)本函数用来取设备handle的类型

int lock(int handle,long offset,long length) 对文件共享作封锁

int unlock(int handle,long offset,long length) 打开对文件共享的封锁


int close(int handle) 关闭handle所表示的文件处理,handle是从_creat、creat、

creatnew、creattemp、dup、dup2、_open、open中的一个处调用获得的文件处理成功返回0否则返回-1,可用于UNIX系统

int _close(int handle) 关闭handle所表示的文件处理,handle是从_creat、creat、creatnew、creattemp、dup、dup2、_open、open中的一个处调用获得的文件处理成功返回0否则返回-1,只能用于MSDOS系统

FILE *fopen(char *filename,char *type) 打开一个文件filename,打开方式为type,
并返回这个文件指针,type可为以下字符串加上后缀
┌──┬────┬───────┬────────┐
│type│读写性 │文本/2进制文件│建新/打开旧文件 │
├──┼────┼───────┼────────┤
│r │读 │文本 │打开旧的文件 │
│w │写 │文本 │建新文件 │
│a │添加 │文本 │有就打开无则建新│
│r+ │读/写 │不限制 │打开 │
│w+ │读/写 │不限制 │建新文件 │
│a+ │读/添加 │不限制 │有就打开无则建新│
└──┴────┴───────┴────────┘
可加的后缀为t、b。加b表示文件以二进制形式进行操作,t没必要使用
例: ┌──────────────────┐
│#include │
│main() │
│{ │
│ FILE *fp; │
│ fp=fopen("C:\\WPS\\WPS.EXE","r+b");│
└──────────────────┘
FILE *fdopen(int ahndle,char *type)

FILE *freopen(char *filename,char *type,FILE *stream)


int getc(FILE *stream) 从流stream中读一个字符,并返回这个字符

int putc(int ch,FILE *stream)向流stream写入一个字符ch


int getw(FILE *stream) 从流stream读入一个整数,错误返回EOF

int putw(int w,FILE *stream)向流stream写入一个整数

int ungetc(char c,FILE *stream) 把字符c退回给流stream,下一次读进的字符将是c

int fgetc(FILE *stream) 从流stream处读一个字符,并返回这个字符

int fputc(int ch,FILE *stream) 将字符ch写入流stream中

char *fgets(char *string,int n,FILE *stream) 从流stream中读n个字符存入string中

int fputs(char *string,FILE *stream) 将字符串string写入流stream中

int fread(void *ptr,int size,int nitems,FILE *stream) 从流stream中读入nitems个长度为size的字符串存入ptr中

int fwrite(void *ptr,int size,int nitems,FILE *stream) 向流stream中写入nitems个长度为size的字符串,字符串在ptr中

int fscanf(FILE *stream,char *format[,argument,…]) 以格式化形式从流stream中读入一个字符串

int vfscanf(FILE *stream,char *format,Valist param) 以格式化形式从流stream中读入一个字符串,参数从Valist param中取得

int fprintf(FILE *stream,char *format[,argument,…]) 以格式化形式将一个字符串写给指定的流stream

int vfprintf(FILE *stream,char *format,Valist param) 以格式化形式将一个字符串写给指定的流stream,参数从Valist param中取得

int fseek(FILE *stream,long offset,int fromwhere) 函数把文件指针移到fromwhere所指位置的向后offset个字节处,fromwhere可以为以下值:SEEK_SET 文件开关 SEEK_CUR 当前位置 SEEK_END 文件尾

long ftell(FILE *stream) 函数返回定位在stream中的当前文件指针位置,以字节表示

int rewind(FILE *stream) 将当前文件指针stream移到文件开头

int feof(FILE *stream) 检测流stream上的文件指针是否在结束位置


int fileno(FILE *stream) 取流stream上的文件处理,并返回文件处理


int ferror(FILE *stream) 检测流stream上是否有读写错误,如有错误就返回1


void clearerr(FILE *stream) 清除流stream上的读写错误


void setbuf(FILE *stream,char *buf) 给流stream指定一个缓冲区buf


void setvbuf(FILE *stream,char *buf,int type,unsigned size)给流stream指定一个缓冲区buf,大小为size,类型为type,type的值见下表
┌───┬───────────────────────────────┐
│type值│意义 │
├───┼───────────────────────────────┤
│_IOFBF│文件是完全缓冲区,当缓冲区是空时,下一个输入操作将企图填满整个缓│
│ │冲区.在输出时,在把任何数据写到文件之前,将完全填充缓冲区. │
│_IOLBF│文件是行缓冲区.当缓冲区为空时,下一个输入操作将仍然企图填整个缓│
│ │冲区.然而在输出时,每当新行符写到文件,缓冲区就被清洗掉. │
│_IONBF│文件是无缓冲的.buf和size参数是被忽略的.每个输入操作将直接从文 │
│ │件读,每个输出操作将立即把数据写到文件中. │
└───┴───────────────────────────────┘
int fclose(FILE *stream) 关闭一个流,可以是文件或设备(例如LPT1)

int fcloseall() 关闭所有除stdin或stdout外的流

int fflush(FILE *stream) 关闭一个流,并对缓冲区作处理处理即对读的流,将流内内容读入缓冲区; 对写的流,将缓冲区内内容写入流。成功返回0

int fflushall() 关闭所有流,并对流各自的缓冲区作处理处理即对读的流,将流内内容读入缓冲区;对写的流,将缓冲区内内容写入流。成功返回0

int access(char *filename,int amode) 本函数检查文件filename并返回文件的属性,函数将属性存于amode中,amode由以下位的组合构成
06可以读、写 04可以读 02可以写 01执行(忽略的) 00文件存在如果filename是一个目录,函数将只确定目录是否存在函数执行成功返回0,否则返回-1

int chmod(char *filename,int permiss) 本函数用于设定文件filename的属性
permiss可以为以下值
S_IWRITE允许写 S_IREAD允许读 S_IREAD|S_IWRITE允许读、写

int _chmod(char *filename,int func[,int attrib]);
本函数用于读取或设定文件filename的属性,当func=0时,函数返回文件的属性;当func=1时,函数设定文件的属性 若为设定文件属性,attrib可以为下列常数之一 FA_RDONLY只读 FA_HIDDEN隐藏 FA_SYSTEM系统
0 0
原创粉丝点击