linux都是以文件为单位对数据进行管理的,每一个打开的文件在内存中都有一个结构体与之相对应,
这个结构体保存文件信息:文件名、大小、位置、权限等等
typedef struct {成员列表} FILE;
文件的操作:
<1>打开FILE* fopen(const char* path, const char* mode);
path:包含文件全路径信息的字符串
mode:访问文件的方式
文本文件:
"r"只读文件必须存在
"w"写入文件不存在则创建,否则覆盖
"a"追加文件不存在则创建,否则追加
下面的情况文件必须存在:
"r+"读写文件开始
"w+"读写覆盖
"a+"读写追加
二进制文件:功能同上
"rb"
"wb"
"ab"
下面的情况必须存在:
"rb+"或者"r+b"
"wb+""w+b"
"ab+""a+b"
成功:返回FILE*,失败:返回NULL
<2>关闭文件:注意在文件操作失败退出前应该关闭打开的所有文件资源
int fclose(FILE* fp);
成功:返回0,失败:返回-1
<3>文件的操作
1.读写单个数据函数
int fputc(int c, FILE* fp);将一个字符写到文件中
成功:返回c的值,失败返回-1
int fgetc(FILE* fp);从文件中读取一个字符并返回其ASC码对应的值,失败返回-1
2.读写数据块函数
size_t fread(buffer,size,count,fp);//从fp中读取count个大小为size字节的元素的数据放入buffer中
size_t fwrite(buffer,size,count,fp);//从buffer中取出count个字节大小为size的元素,并向fp中写入
成功:返回成功读写的元素个数
3.其他读写方式:
fgets
fputs
fprintf
fscanf
<4>文件定位
文件中有一个位置指针,指向当前读写的位置,操作完当前的元素之后,位置指针自动指向下一个元素
int fseek(FILE* fp,long offset,int whence);
offset:偏移量
whence:起始处
文件开始:0SEEK_SET
文件当前:1SEEK_CUR
文件末尾:2SEEK_END
fseek(fp,-1*sizeof(struct),SEEK_CUR);//从当前指针位置后退一个结构体大小的字节,作为指针的位置
成功:返回0,失败:返回-1
另外还有其他的方式:
rewind
ftell