头文件:
#include<cstdio>
函数声明:
FILE * fopen(const char * path,const char * mode);
path字符串
包含欲打开的文件路径及文件名如果没有指定文件路径,则默认为当前工作目录
mode字符串
使用方式
具体含义
“rt”
只读打开一个文本文件,只允许读数据
“wt”
只写打开或建立一个文本文件,只允许写数据
“at”
追加打开一个文本文件,并在文件末尾写数据
“rb”
只读打开一个二进制文件,只允许读数据
“wb”
只写打开或建立一个二进制文件,只允许写数据
“ab”
追加打开一个二进制文件,并在文件末尾写数据
“rt+”
读写打开一个文本文件,允许读和写
“wt+”
读写打开或建立一个文本文件,允许读写
“at+”
读写打开一个文本文件,允许读,或在文件末追加数据
“rb+”
读写打开一个二进制文件,允许读和写
“wb+”
读写打开或建立一个二进制文件,允许读和写
“ab+”
读写打开一个二进制文件,允许读,或在文件末追加数据
文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:
r(read)
: 读 (打开只读文件,该文件必须存在)
w(write)
: 写 (打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失.若文件不存在则建立该文件)
a(append)
: 追加(以附加的方式打开只写文件.若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留)
t(text)
: 文本文件,可省略不写
b(banary)
: 二进制文件
+
: 可读和写
上述的形态字符串都可以再加一个 b 字符,如 rb、w+b 或 ab+ 等组合,加入 b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件.不过在 POSIX 系统,包含 Linux 都会忽略该字符.由 fopen() 所建立的新文件会具有
S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH
(0666) 权限,此文件权限也会参考 umask 值.
使用 fopen() 函数打开的文件会先将文件复制到缓冲区.注意:所下达的读取或写入动作,都是针对缓冲区进行存取而不是磁盘,只有当使用 fclose() 函数关闭文件时,缓冲区中的数据才会写入磁盘
.
返回值:
文件顺利打开后,指向该流的文件指针就会被返回.若果文件打开失败则返回 NULL , 并把错误代码存在 errno 中.(附加说明 一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在 fopen() 后请作错误判断及处理.)
头文件:
#include<cstdio>
函数声明:
char * fgets(char * s,int size,FILE * stream);
说明:
fgets() 用来从参数 stream 所指的文件内读入字符并存到参数 s 所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上 NULL 作为字符串结束.
返回值:
gets() 若成功则返回 s 指针,返回 NULL 则表示有错误发生.
头文件:
#include<cstdio>
函数声明:
size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);
fwrite() 用来将数据写入文件流中
fprintf 和 fscanf 函数的读写对象不是终端(标准输入输出),而是磁盘文件
说明:
它们与 printf 和 scanf 函数相仿,都是格式化读写函数.不同的是:fprintf 和 fscanf 函数的读写对象不是终端(标准输入输出),而是磁盘文件.printf 函数是将内容输出到终端(屏幕),因此,fprintf 就是将内容输出到磁盘文件了
头文件:
#include<cstdio>
函数声明:
int getchar(void);
getchar() 用来从标准输入设备中读取一个字符.然后将该字符从 unsigned char 转换成 int 后返回
getchar() 非真正函数,而是 getc(stdin) 宏定义
头文件:
#include<cstdio>
函数声明:
char * gets(char *s);
说明:
gets() 用来从标准设备读入字符并存到参数 s 所指的内存空间,直到出现换行字符或读到文件尾为止,最后加上 NULL 作为字符串结束,由于 gets() 无法知道字符串 s 的大小,必须遇到换行字符或文件尾才会结束输入,因此容易造成缓冲溢出的安全性问题.建议使用 fgets() 取代
返回值:
gets() 若成功则返回 s 指针,返回 NULL 则表示有错误发生.
头文件:
#include<cstdio>
函数声明:
void setbuffer(FILE * stream,char * buf,size_t size);
说明:
在打开文件流后,读取内容之前,调用 setbuffer() 可用来设置文件流的缓冲区.
stream
为指定的文件流
buf
指向自定的缓冲区起始地址
size
为缓冲区大小
头文件:
#include<cstdio>
函数声明:
void setlinebuf(FILE * stream);
说明:
setlinebuf() 用来设置文件流以换行为依据的无缓冲 IO.相当于调用 setvbuf(stream,(char * )NULL,_IOLBF,0);
头文件:
#include<cstdio>
函数声明:
int setvbuf(FILE * stream,char * buf,int mode,size_t size);
说明:
在打开文件流后,读取内容之前,调用 setvbuf() 可以用来设置文件流的缓冲区
stream
为指定的文件流
buf
指向自定的缓冲区起始地址
size
为缓冲区大小
mode
取值有下列几种:
_IONBF
无缓冲 IO
_IOLBF
以换行为依据的无缓冲 IO
_IOFBF
完全无缓冲 IO.如果参数 buf 为 NULL 指针,则为无缓冲 IO
头文件:
#include<cstdio>
函数声明:
int fseek(FILE * stream,long offset,int whence);
fseek() 用来移动文件流的读写位置
fseek() 不像 lseek() 会返回读写位置,因此必须使用ftell()来取得目前读写的位置
函数声明:
long ftell(FILE * stream);
说明:
ftell() 用来取得文件流目前的读写位置
返回值:
当调用成功时则返回目前的读写位置,若有错误则返回 -1,errno 会存放错误代码(错误代码: EBADF 参数 stream 无效或可移动读写位置的文件流)
头文件:
#include<cstdio>
函数声明:
FILE * fdopen(int fildes,const char * mode);
说明:
fdopen()会将参数fildes 的文件描述词,转换为对应的文件指针后返回
参数:
mode 字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。关于mode 字符串格式请参考fopen()。
返回值:
转换成功时返回指向该流的文件指针。失败则返回NULL,并把错误代码存在errno中。