arthur丶Top
整理自己发现的学习知识点,好记性不如烂笔头。

C语言文件操作

输入输出子程序,函数库为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 <stdio.h>                                       │ 
                    │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系统

posted on 2015-12-29 11:50  arthur丶Top  阅读(243)  评论(0编辑  收藏  举报