fopen( ):以指定的形式打开文件
r:以只读方式打开文件,该文件必须存在。
r+:以读/写方式打开文件,该文件必须存在。
rb+:以读/写方式打开一个二进制文件,只允许读/写数据。
rt+:以读/写方式打开一个文本文件,允许读和写。
w:打开只写文件,若文件存在则长度清为0,即该文件内容消失,若不存在则创建该文件。
w+:打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a:以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF符保留)。
a+:以附加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的EOF符 不保留)。
wb:以只写方式打开或新建一个二进制文件,只允许写数据。
wb+:以读/写方式打开或建立一个二进制文件,允许读和写。
wt+:以读/写方式打开或建立一个文本文件,允许读写。
at+:以读/写方式打开一个文本文件,允许读或在文本末追加数据。
ab+:以读/写方式打开一个二进制文件,允许读或在文件末追加数据。
fread( ):从给定流 stream 读取数据到 ptr 所指向的数组中。
n=read(fd,fbuffer,BLKSIZE);
fwrite( ):把 ptr 所指向的数组中的数据写入到给定流 stream 中.
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
fclose( ):关闭流 stream。刷新所有的缓冲区。
int fclose( FILE *fp );
字符模式I/O
int fgetc(FILE *fp);
该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。
int ungetc(int c, FILE *fp);
如果成功,则返回被推入的字符,否则返回 EOF,且流 stream 保持不变。
int fputc(int c, FILE *fp);
如果没有发生错误,则返回被写入的字符。如果发生错误,则返回 EOF,并设置错误标识符。
行模式I/O
格式化I/O
格式化输入(注意类比思维)
scanf(char *FMT,&items);
fscanf(fp, char *FMT,&items);
格式化输出
printf(char *FMT,items);
fprintf(fp,char *FMT,items)
内存中的转换函数
sscanf(buf,FMT,&items);
sprintf(buf, FMT, items);
其他I/O库函数(了解即可)
限制混合fread-fwrite
当某文件同时进行读、写操作时,会限制混合使用fread()和fwrite(),注意两者之间至少有一个fseek()或者ftell()
setvbuf(FILE *stream,char *buf , int node,int size)
在I/O中 printf()相当独特,多种类型的可变数量参数都可以调用它
#include <ctype.h> #include <stdio.h> #include <stdlib.h> #define INPUT_FILE "tmp1.txt" #define OUTPUT_FILE "tmp2.txt" int main(void) { char c; FILE *fin, *fout; fin = fopen(INPUT_FILE, "r"); if (!fin) { perror(INPUT_FILE); exit(1); } fout = fopen(OUTPUT_FILE, "w"); if (!fout) { perror(OUTPUT_FILE); exit(2); } while ((c = fgetc(fin)) != EOF) { if (isupper(c) || islower(c)) c ^= 0x20; fputc(c, fout); } return 0; }