1. 基于文件指针的文件操作(缓冲)
linux中对目录和设备的操作都是文件操作,文件分为普通文件,目录文件,链接文件和设备文件。
1.1. 文件的创建,打开与关闭
原型为:
#include <stdio.h> //头文件包含
FILE *fopen(const char *pach,const char *mode); //文件名 模式
int fclose(FILE *stream);
fopen以mode的方式打开或创建文件,如果成功,将返回一个文件指针,失败则返回NULL.
fopen创建的文件的访问权限将以0666与当前的umask结合来确定。
1.2. 读写文件
基于文件指针的数据读写函数较多,可分为如下几组:
数据块读写:
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);
fread从文件流stream 中读取nmemb个元素,写到ptr指向的内存中,每个元素的大小为size个字节。
fwrite从ptr指向的内存中读取nmemb个元素,写到文件流stream中,每个元素size个字节。
所有的文件读写函数都从文件的当前读写点开始读写,读写完以后,当前读写点自动往后移动size*nmemb个字节。
1.3.文件定位:
文件定位指读取或设置文件当前读写点,所有的通过文件指针读写数据的函数,都是从文件的当前读写点读写数据的。
常用的函数有:
#include <stdio.h>
int feof(FILE * stream); //通常的用法为while(!feof(fp))
int fseek(FILE *stream, long offset, int whence);//设置当前读写点到偏移whence 长度为offset处
long ftell(FILE *stream); //用来获得文件流当前的读写位置
void rewind(FILE *stream); //把文件流的读写位置移至文件开头 èfseek(fp, 0, SEEK_SET);
feof判断是否到达文件末尾的下一个(注意到达文件末尾之后还会做一次)
fseek设置当前读写点到偏移whence 长度为offset处,whence可以是:
SEEK_SET (文件开头 –>0)
SEEK_CUR (文件当前位置 –>1)
SEEK_END (文件末尾 –>2)
ftell获取当前的读写点
rewind将文件当前读写点移动到文件头
1.4.格式化读写:
#include <stdio.h>
int printf(const char *format, ...); //相当于fprintf(stdout,format,…);
int scanf(const char *format, …);
int fprintf(FILE *stream, const char *format, ...);
int fscanf(FILE *stream, const char *format, …);
int sprintf(char *str, const char *format, ...); // eg: sprintf(buf,”the string is;%s”,str);
int sscanf(char *str, const char *format, …);
以f开头的将格式化后的字符串写入到文件流stream中
以s开头的将格式化后的字符串写入到字符串str中