ANSI文件IO管理以及POSIX文件及目录管理

ANSI文件IO管理

ANSI标准下的C库函数建立在底层系统调用之上,即C函数库文件访问函数的实现中使用了低级文件IO系统调用。
ANSI标准的C库中的文件处理函数`为了减少系统调用的次数,采用了缓冲区机制,这样就可以减少与磁盘的交互次数,提高效率。ANSI标准为实现这一特性,采用了流的概念,在流的实现中,缓冲区是最重要的单元。根据需求的不同分为全缓冲区,行缓冲区,以及无缓冲区3种。
全缓冲区: 默认大小为BUFSIZ(8192),在缓冲区满或者调用fflush()函数的时候,才进行系统IO调用,用于普遍磁盘文件的流都使用的是全缓冲区。
行缓冲区: 在遇到换行符或者缓冲区满的时候,行缓冲才刷新,部分系统默认的是128字节。
无缓冲区:标准IO库不对字符进行缓存,如果标准IO函数些若干字符到不带缓冲区的流中,则相当于用write()系统调用函数,直接将这些字符写至文件中,标准出错流stderr,则是无缓冲区。
用户可以通过setbuf()以及setvbuf()来自己设定缓冲区,其中setbuf()函数的原型是:
setbuf(FILE* _restrct_stream,char*_restrict_buf);
第一个参数是流对象,第2个参数指向的是一个大小为BUFSIZ的缓冲区。
setvbuf(FILE* _restrct_stream,char*_restrict_buf,int mode,size_t n)
第一个参数是流对象,第2个参数是一个buffer,第3个参数是buffer的类型,第4个参数是buffer的大小。其中第3个参数可以取值0,1,2,分别代表_IOFBUF,_IOLBUF,_IONBUF. 具体的运用如下:
ANSI文件IO管理以及POSIX文件及目录管理_第1张图片
ANSI文件IO管理以及POSIX文件及目录管理_第2张图片

ANSI C文件IO操作

打开文件。

File* fopen(char*_restrict_filename,char*_restrict_modes)
第一个参数指向`欲打开的文件名字符串指针,可以用绝对路径和相对路径来指定,第2个参数为打开模式,有以下几种:
ANSI文件IO管理以及POSIX文件及目录管理_第3张图片

关闭文件

flcose(File* _stream);
-
- 更新缓冲区。

fflush(File* _stream).

  • 读写文件流。

  • 字符读写文件流

    fgetc(File* _stream); fgetc(stdin)=getchar();
    fputc(File* _stream);fput(‘c’,stdout)=putchar(‘c’);

  • 行读写流

    fgets(char* s,int n,File* stream);
    此函数从stream中读取字符到s当中,直到读取n-1字符,换行符,或者文件结束标志EOF,并将最后一个空间制为’\0’.
    fputs(char* s,File* stream);

  • 5.块读写流。

    fread(void* ptr,size_t size,size_t n,File stream);
    fwrite(void* ptr,size_t size,size_t n,File stream);

6.文件流定位。

ftell(File* stream); //当前读写指针的位置。
rewind(file* stream); //使读写指针位于文件开始
fseek(file* stream,int off,int whence);
ANSI文件IO管理以及POSIX文件及目录管理_第4张图片

  • 7.流的格式化输入输出。

    fprintf();
    fscanf();
    这里写图片描述
    ANSI文件IO管理以及POSIX文件及目录管理_第5张图片
    sprintf();
    sscanf();
    这里写图片描述
    ANSI文件IO管理以及POSIX文件及目录管理_第6张图片
    ANSI文件IO管理以及POSIX文件及目录管理_第7张图片

POSIX文件及目录管理

1.文件描述符与文件流的转化。
fileno(File* stream); //得到该文件流的文件描述符。
fdopen(int fd,char* mode);
第一个参数为文件描述符,第2个参数封装流的权限,如果执行成功,返回一个流对象。
- 文件IO管理。

  • 打开文件

    open(char* file,int flag,….)
    第一个参数为文件路径,第2个参数为打开文件的方式。,各方式如下:
    ANSI文件IO管理以及POSIX文件及目录管理_第8张图片
    ANSI文件IO管理以及POSIX文件及目录管理_第9张图片
    ANSI文件IO管理以及POSIX文件及目录管理_第10张图片
    ANSI文件IO管理以及POSIX文件及目录管理_第11张图片

  • 关闭文件

    close(int fd);

  • 创建文件

    creat(char* file,_mode_t mode);
    第2个参数为文件的权限。

  • 文件控制

    ANSI文件IO管理以及POSIX文件及目录管理_第12张图片
    读写文件内容
    read(int fd,void* buf,int nbytes);
    write(int fd,void* buf,int nbytes);

  • 文件定位

    ANSI文件IO管理以及POSIX文件及目录管理_第13张图片

  • 同步内核缓冲区

    void sync(void);
    fsync();
    fdatasync();
    ANSI文件IO管理以及POSIX文件及目录管理_第14张图片

  • 映射文件到内存

ANSI文件IO管理以及POSIX文件及目录管理_第15张图片
ANSI文件IO管理以及POSIX文件及目录管理_第16张图片
目录流的基本操作
- 打开关闭文件目录

ANSI文件IO管理以及POSIX文件及目录管理_第17张图片
- 读写目录内容

ANSI文件IO管理以及POSIX文件及目录管理_第18张图片
- 定位目录位置

ANSI文件IO管理以及POSIX文件及目录管理_第19张图片
- 添加删除目录

ANSI文件IO管理以及POSIX文件及目录管理_第20张图片
- 当前路径操作


- 对比

ANSI文件IO管理以及POSIX文件及目录管理_第21张图片

你可能感兴趣的:(linux文件操作)