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

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

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

最新文章

  1. Good Bye 2016 - C
  2. 二叉树的层序遍历 BFS
  3. 11 JSP/EL表达式/EL函数
  4. Reverse-Daily(3)-DotNetCrackMe1
  5. php使用 memcache 来存储 session 方法总结
  6. Java后台工程师面试杂记——不跳不涨工资星人跳槽经历
  7. jquery trigger伪造a标签的click事件取代window.open方法
  8. 高并发网络编程之epoll详解
  9. Debian 7 安装 Docker
  10. pthread_create用法
  11. mysql init_connect 参数的其他用处
  12. Memento 模式
  13. Android4.0强制横屏竖屏
  14. Struts2中ActionContext及ServletActionContext介绍(转载)
  15. 两种实现方式mycat多租户,枚举分片,注解拦截
  16. Oracle 中Return 和exit的区别
  17. Gradle 下载的依赖包在什么位置?
  18. 嵌入Python | 调用Python模块中无参数的函数
  19. CF113D 高斯消元、dp
  20. 学习mybatis-3 step by step 篇四

热门文章

  1. QSS类的用法及基本语法介绍
  2. PyQuery的基本使用详解
  3. python并发编程知识点总结
  4. 中文Appium API 文档
  5. CSS 之怀疑自己的审美 2 (Day50)
  6. 错误:未启用当前数据库的SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker。
  7. HDU - 6321 Problem C. Dynamic Graph Matching (状压dp)
  8. ES集群重启
  9. Matlab 使用的一些常用技巧
  10. Javascript 小数保留2位