• open与fopen 文件描述符与文件指针


     

    首先说一下文件描述符与文件指针区别:

    文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的正整数。每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。

    文件指针:C语言中使用文件指针做为I/O的句柄。文件指针指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括一个缓冲区和一 个文件描述符。而文件描述符是文件描述符表的一个索引,因此从某种意义上说文件指针就是句柄的句柄(在Windows系统上,文件描述符被称作文件句 柄)。

     

    open和fopen的区别:

    open返回一个文件描述符(int),fopen返回一个文件指针(FILE*)。
    open无缓冲,fopen有缓冲。
    open与 read, write 等配合使用, fopen与 fread, fwrite等配合使用。
    fopen是在open的基础上扩充而来的,在大多数情况下,用fopen。
     
     
    先关函数:
    open 函数用于打开和创建文件。以下是 open 函数的简单描述
    #include <fcntl.h> int open(const char *pathname, int oflag, ... /* mode_t mode */);
    返回值:成功则返回文件描述符,否则返回 -1对于 open 函数来说,第三个参数(...)仅当创建新文件时才使用,用于指定文件的访问权限位(access permission bits)。pathname 是待打开/创建文件的路径名(如 C:/cpp/a.cpp);oflag 用于指定文件的打开/创建模式,这个参数可由以下常量(定义于 fcntl.h)通过逻辑或构成。
    O_RDONLY      只读模式
    O_WRONLY      只写模式
    O_RDWR        读写模式

    打开/创建文件时,至少得使用上述三个常量中的一个。以下常量是选用的:O_APPEND       每次写操作都写入文件的末尾
    O_CREAT        如果指定文件不存在,则创建这个文件
    O_EXCL         如果要创建的文件已存在,则返回 -1,并且修改 errno 的值
    O_TRUNC        如果文件存在,并且以只写/读写方式打开,则清空文件全部内容
    O_NOCTTY       如果路径名指向终端设备,不要把这个设备用作控制终端。
    O_NONBLOCK     如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O设置为非阻塞模式(nonblocking mode)以下三个常量同样是选用的,它们用于同步输入输出O_DSYNC        等待物理 I/O 结束后再 write。在不影响读取新写入的数据的前提下,不等待文件属性更新。
    O_RSYNC        read 等待所有写入同一区域的写操作完成后再进行
    O_SYNC         等待物理 I/O 结束后再 write,包括更新文件属性的 I/Oopen 返回的文件描述符一定是最小的未被使用的描述符。

    fopen(打开文件)
    相关函数 open,fclose
    表头文件 #include<stdio.h>
    定义函数 FILE * fopen(const char * path,const char * mode);
    函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
    mode有下列几种形态字符串:
    r 打开只读文件,该文件必须存在。
    r+ 打开可读写的文件,该文件必须存在。
    w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消
    失。若文件不存在则建立该文件。
    w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容
    会消失。若文件不存在则建立该文件。
    a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,
    如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会
    被保留。
    a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文
    件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的
    内容会被保留。
  • 相关阅读:
    内存堆与栈的区别
    深度理解相对路径和绝对路径
    INFO:InstallAnywhere的Enterprise版本和Standard版本的主要区别
    HOWTO:InstallShield中如何调用批处理文件
    HOWTO:InstallScript工程中如何在用户协议界面中默认为接受协议
    HOWTO:InstallShield中如何通过脚本获取“My Documents”路径
    INFO:InstallShield工程中关于.NET依赖项的编译扫描警告
    InstallShield Kevin Wan博客文章索引列表(001~100)
    HOWTO:在InstallShield脚本中打开一个URL链接
    INFO:在InstallShield中修改安装包压缩.cab包的大小
  • 原文地址:https://www.cnblogs.com/pswzone/p/2446266.html
Copyright © 2020-2023  润新知