对于文件的读写操作函数在执行的空间来分,可以分为内核IO(主要在内核中运行)和标准IO(主要在用户空间中运行).
内核IO需要自己创建和管理缓存,而标准IO是自动分类缓存,一般来说,内核IO的效率高于标准IO,但是差距不是很大,考虑移植性,还是建议使用标准IO(只要是支持标准C语言就支持标准IO).
无论是标准IO还是内核IO都是对文件的信息,读写文件的指针进行记录的,调用相应的函数可以进行文件信息的读取和指针的修改.
以下为IO相关的函数的头文件,使用,参数,返回值的说明
linux C语言IO 函数(内核IO) :open/close/lseek/read/write
头文件:<sys/types.h>,<sys/stat.h>,<fcntl.h>//打开文件
open("文件路径及文件名",打开方式,(如果创建则有这个参数,设置文件权限));返回值位int型,-1为失败,正整数为成功,是该文件的标识符;
头文件:<unistd.h>
close(int (打开文件的文件标识符));//关闭文件
头文件:<sys/types.h>,<unistd.h>//每个文件的打开都会有一个读写指针,该函数是调整文件的读写指针到指定的位置
lseek(int fildes,新的读写位置(作为whence的参数),int whence); fildes :文件描述符 ;whence:操作。
返回值:-1为出错。成功为返回当前的指针位置。
头文件:<unistd.h>//读文件的内容
read(int fd,void *buf,int count);fd:文件描述符;buf:将读出的文件存放的地方;count:一次读取的字节数
返回值:-1为出错(出错则读写指针不知道指向了哪里)返回0则是读到文件尾或者遇到没法读取的数据。正常是返回读取的实际字节数
头文件:<unistd.h>//进行写操作
write(int fd,const void *buf,int count);fd:文件描述符;buf:需要写的内容 ;count:一次写了的字节数;
返回值:-1出错,正常则返回实际字节数。
标准C语言IO函数(标准IO):
fopen/fclose/
fputs/fgets/
fflush/ftell
fseek/rewind/
gets/puts/
fprintf/sprintf/
fgetc/fputc/
feof/
ferror/clearerr/
fread/fwrite/
头文件:<stdio.h>//打开文件
fopen(const char * path,const char *mode);path:要打开的文件路径和文件名;mode:打开方式
返回值:FILE* 类是与open 的文件标识符 打开失败则返回NULL;
头文件:<stdio.h>//关闭文件
fclose(FILE *stream);
返回值:-1则有错误发生,成功返回0;
头文件:<stdio.h>//将文件流中读取字符串到format中
int fscanf(FILE*stream,const char *format,......);
返回值:成功则返回参数数目,失败则返回-1
头文件:<stdio.h>//根据字符串格式转化数据,并将结果输入到指定文件中
int fprintf(FILE*stream,const char *format,......);
返回值:成功返回写的字节数,错误则-1;
头文件:<stdio.h>//将文件内容读取到s中
fgets(char *s,int size, FILE *stream);*s:存储文件内容,size:读取的字节数(读取size - 1个字节,最后会加上NULL);
返回值:char*,成功则返回s指针,失败则返回NULL
头文件:<stdio.h>//将文件内容写入文件中
fputs(const char *s,FILE*stream);
返回值:成功返回写的字节数,错误则-1;
头文件:<stdio.h>//从文件中读取一个字符
fgetc(FILE*stream);
返回值:正常则返回读取到的字符,若读到-1则表示读到文件尾了。
头文件: <stdio.h>//将指定字符写入文件流
fputc(int c,FILE* stream);c 是写入的值,会自动转化为unsigned char 然后再写入文件
返回值:-1写入失败 ,正常则返回成功写入的字符 int
头文件:<stdio.h>//由标准输入设备内读进一字符串
char * gets(char *s);读取字符到s中,读取到换行字符或者读取到文件尾为之,
最后加上NULL作为字符串结束
返回值:正常返回s指针,返回NULL则表示发生错误。
头文件:<stdio.h>//将字符串写到标准输出(STDOUT)
int puts(char *str);
返回值:成功返回非负值,失败返回-1;
头文件:<stdio.h>//强制刷新缓存区,将缓存区内容写入文件
fflush(FILE*stream);
返回值:成功0,失败-1
头文件:<stdio.h>//移动文件读取指针
fseek(FILE*stream,long offset,int whence(宏));offset:文件读取指针移动的位置。
fseek(FILE*stream,0,SEEK_SET/SEEK_END);移动指针到文件头/文件尾
返回值:成功0,失败-1
头文件:<stdio.h>//将文件读取指针移动到文件开头
void rewind(FILE*stream);
头文件:<stdio.h>//获取文件流目前的读写位置
long ftell(FILE*stream);
返回值:-1错误,成功返回当前的文件读写指针
头文件:<stdio.h>//检查文件读取指针是否已经到了文件尾
int feof(FILE*stream);
返回值:到了文件尾则返回非零值,否则返回0
头文件:<stdio.h>//检查文件流是否有错误发生
int ferror(FILE*stream);
返回值:发生错误返回非零。无错误返回0;
头文件:<stdio.h>//清除文件流中的错误旗标
void clearerr(FILE*stream);
头文件:<stdio.h>//从文件流读取数据
int fread(void *ptr,int size,int nmemb,FILE*stream);
ptr:存放读取到的内容
size:读取一个单元的字节数
nmemb:读取的单元数
返回值:返回值比nmemb小那么表示读到文件尾或者有错,需要feof(),或者ferror()来判断
头文件:<stdio.h>//将数据写到文件流中
int fwrite(const void *ptr,int size,int nmemb,FILE*stream);//参数类同fread()
返回值:返回实际写入nmemb