• 文件IO大纲


    1. 文件流与文件描述符的区别

    a) 任何进程在运行时都默认打开3个流对象,(stdin, stdout, stderr)它们都有对应的文件描述符,其文件描述符分别为012,以后打开的文件描述符的值一般都选用未使用的最小值

    b) LINUX为管理每个每个进程打开的文件,在进程的私有结构体struct task_struct(即进程PCB,由内核提供)中,对任何进程来说,都将为这个结构体专门分配管理打开文件信息的表项,用以指示当前进程打开的文件结构体,通俗点解释就是每一个进程都在内核的struct task_struct结构体中有一个信息表项,然后这个表项指向这个进程所打开的文件列表,然后文件列表中的文件描述符指向具体打开的文件结构信息

    c) 文件描述符与文件流的转换操作

    linux为用户层提供了函数fileno( )以从文件流中读取其文件描述符

    extern int fileno( FILE *__stream)

    函数fdopen( )将实现某个流与一个文件描述符的连接

    extern FILE *fdopen ( int __fd,  __const char *__modes),这里需要使用fprintf( )来操作流对象。

    有了上述对流,对文件描述符的较深入的了解,接下来学习POSIX标准下的文件IO管理就会有更多自己的体会。

    1. fopen( ), fread( ), fwrite( ), fclose( ), open( ), read( ), write( ), close( ), creat( ), lseek( )

    文件打开flags标识一览:

    O_RDONLY

    O_WRONLY

    O_RDWR,

    O_CREAT

    O_EXCL若同O_CREAT一起使用,如果文件已经存在报错

    O_NOCTTY 如果打开终端设备,不将其作为进程控制终端机

    O_TRUNC 若文件存在并且可读可写,将文件内容清空

    O_APPEND 读写文件时从文件尾部开始

    O_NONBLOCK以非阻塞方式打开,执行后立即返回

    O_NDELAY O_NONBLOCK

    O_SYNC 同步方式打开文件,关闭文件前,将缓存写入

    O_LARGEFILE 32位系统下支持大于2G文件打开操作

     

    文件打开权限一览:

    S_IR/W/X)(USR/GRP/OTH),S_IRWXU, S_IRWXO, S_IRWXG

    以上是系统函数权限设置标识,用户函数不同,如“r+”“w+”等

    自己做笔记添加进来。

    1. 文件控制fcntl( )函数用于修改某个文件描述符的特殊属性,复制文件描述符,获取文件描述符,设置文件描述符,获取文件状态设置文件状态
    2. 映射文件到内存mmap( )
    3. 锁定/解锁文件

    函数flock( ) 和 函数fcntl( )都可以提供对文件的锁操作,但是flock( )只能锁定整个文件,不能锁定某个区域,而fcntl( )可以提供任意位置的内容锁定。

    1. 目录流的基本操作-----目录文件中存储的是该目录下所有的文件以及子目录文件的信息

    a) 打开/关闭目录文件

    DIR *opendir( const char *dirname)

    DIR *closedir( const char *dirname) 返回一个目录流指针

    b) /写目录内容

    c) 定位目录内容

    d) 添加和删除目录

    e) 获取当前工作路径

    7.以上关于文件的操作只是基本的关于文件操作内容,还有一块内容,是关于对普通文件,连接文件及目录文件属性的读取修改等操作,这块内容大家自己学习,不进行讲授。

  • 相关阅读:
    解决vue项目route使用history模式,tomcat部署刷新url 404问题
    更新
    Mac Anaconda 安装
    Mac python 环境配置
    Mac Python PyQt5 环境搭建
    Python 百分比计算
    Python __init__.py 文件使用
    Python redis 简单介绍
    python Django 创建应用
    python Django 项目创建
  • 原文地址:https://www.cnblogs.com/coding4/p/5604893.html
Copyright © 2020-2023  润新知