访问文件的途径:二进制模式和文本模式
I/O级别:底层I/O和标准高级I/0
C程序自动打开的文件:标准输入(standard input)-stdin、标准输出(standard output)-stdout、标准错误输出(standard error output)-stderr
- fopen():
第一个参数为待打开文件名,第二个参数为指定待打开文件的模式的字符串。成功打开文件后,函数返回文件指针(file pointer)
“r”:读模式打开文件
“w”:写模式打开文件,把现有文件的长度截为0,若文件不存在,则创建一个新文件
“a”:写模式打开文件,在现有文件末尾添加内容,若文件不存在,则创建一个新文件
“r+”:更新模式打开文件(即可以读写文件)
“w+”:更新模式打开文件,把现有长度截为0,若文件不存在,则创建一个新文件
“a+”:更新模式打开文件,在现有文件末尾添加内容,若文件不存在,则创建一个新文件,可以读整个文件,但是只能在末尾添加内容
“rb”、“wb”、“ab”、“rb+”、“wb+”、“ab+”、“a+b”、“r+b”、“w+b”:与上述模式类似,但是是以二进制模式打开文件。
“wx”、“wbx”、“w+x”、“wb+x”、“w+bx”:类似非x模式,但是如果文件已存在或者以独占模式打开文件,则打开文件失败,如果用x的写模式,会返回错误,但是不会将文件长度截为0;另外x模式的独占特性,使得其他程序或者线程无法访问正在被打开的文件。
- fclose():
关闭指定的文件,必要时刷新缓存区。
- getc()与putc():
ch=getc(fp)意思为从fp中获得一个字符;putc(ch,fpout)意思为把字符ch放入FIFE指针fpout指定文件中,第一个参数是待写入的字符,第二个参数是文件指针。
- fseek():
第一个参数为FILE指针,指向带查找的文件。第二个参数是偏移量(offset),改参数必须是一个long类型的值。第三个参数是模式,在stdio.h中规定了几个表示模式的明示常量(manifest constant),比如SEEK_SET(文件开始处),SEEK_CUR(当前位置),SEEK_END(文件末尾)。
- ftell():
返回值类型long,返回的是参数指向文件的当前位置距文件开始处的字节数。
- fgetpos()与fsetpos():
返回值类型为fpos_t(file position type,文件定位类型),它不是基本类型,不能是数组类型。fgetpos(FILE *restrict stream , fpos_t *restrict pos)fpos_t类型的值表示为当前位置距文件开头的字节数。fsetpos(FILE *stream , const fpos_t *pos),fpos_t类型的值来设置文件指针指向偏移该值后指定的位置。
- 其他标准I/0函数
1.int ungetc(int c, FILE *fp);
把c指定的字符放回输入流中。
2.int fflush(FILE *fp);
调用fflush函数引起输出缓冲区中所有的未写入数据被发送到fp指定的输出文件,这个过程称为 刷新缓冲区。如果fp为空指针,则刷新所有输出缓冲区。
3.int setvbuf(FILE *restrict fp, char *restrict buf, int mode , size_t size);
setvbuf函数创建了一个供标准I/O函数替换使用的缓冲区。在打开文件后且尚未对流进行其他操作之前,调用该函数。指针fp识别待处理流,buf指向待使用的存储区,变量size告诉setvbuf数组大小,mode的选择有:_IOFBF(完全缓冲:在缓冲区满时刷新),_IOLBF(在缓冲区满时或写入一个换行符时),_IONBF(无缓冲)。
4.size_t fwrite(const void *restrict ptr, size_t size, size_t nmemb,FILA *restrict fp);
fwrite把二进制数据写入文件。指针ptr是待写入数据块的地址,size表示待写入数据块的字节大小,nmemb表示待写入数据块的数量,fp指定待写入的文件。正常情况下,函数返回值是nmemb的值。
5.size_t fread(void *restrict ptr, size_t size, size_t nmemb, FILE *restrict fp);
fread用于读取被fwrite写入文件的数据。指针ptr是待读取文件数据的地址,size表示待读取数据块的字节大小,nmemb表示待读取数据块的数量,fp指定待读取的文件。
6.int feof(FILE *fp)和int ferror(FILE *fp)
当上一次输入调用检测到文件结尾时,feof返回一个非零值,否则返回零;当读或写出现错误,ferror返回一个非零值,否则返回0。