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

posted @ 2016-06-21 20:14  飘然离去  阅读(203)  评论(0编辑  收藏  举报