unix c编程:带缓冲的文件 I/O

open操作

FILE *fopen(const char *path, const char *mode); //作用:打开一个文件流,打开失败则返回NULL
FILE *freopen(const char *path, const char *mode, FILE *stream); //将一个流进行重定向
FILE *fdopen(int fd,const char *mode);  //将文件描述符fd打开一个文件流

mode选择如下:

r   以只读方式打开文件,该文件必须存在。
r+  以读/写方式打开文件,该文件必须存在。
rb+ 以读/写方式打开一个二进制文件,只允许读/写数据。
rt+ 以读/写方式打开一个文本文件,允许读和写。
w   打开只写文件,若文件存在则长度清为 0,即该文件内容消失,若不存在则创建该文件。
w+  打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a   以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF 符保留)。
a+  以附加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的 EOF 符不保留)。
wb  以只写方式打开或新建一个二进制文件,只允许写数据。
wb+ 以读/写方式打开或建立一个二进制文件,允许读和写。
wt+ 以读/写方式打开或建立一个文本文件,允许读写。
at+ 以读/写方式打开一个文本文件,允许读或在文本末追加数据。
ab+ 以读/写方式打开一个二进制文件,允许读或在文件末追加数据。

read操作
fgetc/getc 从文件中读取一个字符。getc 是一个宏操作

int fgetc(FILE * stream);//从参数stream所指的文件中读取一个字符,返回读取到的字符

注意:1,getc效率比fgetc高 2,返回EOF表示到了文件尾或出现了错误,须通过ferror或feof来区分这两种情况
fgets/gets 从文件中读取一个字符串。gets 是一个宏操作

char *fgets(char *buf, int bufsize, FILE *stream); //成功,则返回第一个参数buf,否则返回NULL

fread 以二进制形式读取文件中的数据

size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;//返回真实读取的count数 
例如:   fread(struct *A, sizeof(struct A), 1, fs); //读一个结构体A
例如:   fread(buffer, sizeof(char), n, fs); //读n个字符

write操作
fputc/putc 写一个字符到文件中去

int fputc (int c, File *fp); //函数返回写入字符的ASCII码值,出错时,返回EOF(-1)

fputs/gets 写一个字符串到文件中去

int fputs(const char *str, FILE *stream);//该函数返回一个非负值,错误则返回 EOF(-1)。

fwrite 以二进制形式写入数据到文件

size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);//返回实际写入的数据块数目

fflush清除读写缓冲区,立即缓冲区的数据进行物理写入

int fflush(FILE *stream);//成功返回0,错误返回EOF

fprintf & sprintf & snprintf 输出重定向

int fprintf (FILE* stream, const char*format, [argument])
例子: fprintf(stream, "%s%c", s, c); //s为字串指针,c为字符数据
int sprintf( char *buffer, const char *format, [ argument] … );
例子: sprintf( buffer,"String:%s\n", s );  //s为字串指针
int snprintf(char *str, size_t size, const char *format, ...);
字符串长度<size,则将此字符串全部复制到str中,并添加结束符('\0');如果>= size,则只将其中的(size-1)个字符复制到str中,并给其后添加一个字符串结束符('\0')
例子: 
snprintf(str, 13, "%010d", 12345);  //返回10,str =0000012345
snprintf(str, 8, "%010d", 12345);   //返回10,str =0000012

sscanf 输入重定向,配合正则表达式功能强大

int sscanf(const char *buffer,const char *format, [ argument ] ...); //可以指定规则,从字符串中取出需要的部分

feof 判断是否到文件结尾

int feof(FILE *stream); //如果文件结束,则返回非0值,否则返回0

ferror 判断读/写文件操作是否正常。(某些读写操作是宏操作,无返回值)

int ferror(FILE *stream); //返回0表示正常

clearerr 清除文件错误标志

void clearerr(FILE *stream); //清除文件错误标志

rewind 重置文件指针到开头

void rewind(FILE *fp); //把文件指针指向文件开始

fseek 文件指针定位

int fseek(FILE *stream, long offset, int fromwhere); //文件指针定位,与lseek作用类似

ftell 获取文件指针当前位置

long ftell(FILE *stream); //得到文件位置指针当前位置相对于文件首的偏移字节数

fileno 通过文件流得到文件描述符

int fileno(FILE *stream); //通过FILE得到文件操作符fd

tmpnam, tmpfile //创建临时文件,没有内存方便

mmap //将某个文件内容映射到内存中,可以直接操作

猜你喜欢

转载自blog.csdn.net/ly601579033/article/details/80741705