在linux操作系统中,实现了两类对文件IO的管理,一类是遵循POSIX标准,linux操作系统自身提供的IO系统调用,如open、close、read等函数;另一类是由ANSI标准提供的标准IO库函数,这些函数是对直接IO系统调用的封装,其在访问文件时根据需要设置了不同类型的缓冲区,从而减少了直接IO系统调用的次数,提高访问效率。

1、  文件流与文件描述符的区别:

使用ANSI C函数fopen打开的文件对应一个流文件,任何进程在运行的时候,都默认打开了3个流对象。对于用户空间来说,任何打开的文件都将被分配一个唯一非整数,用于标识该打开文件,该值即文件描述符。

2、  文件描述符与文件流的转换操作:

Linux为用户层提供了函数fileno()以从文件流中读取其文件描述符,即获得struct FILE的_fileno成员

Int fileno (FILE *_stream) 此函数以某个流对象为参数,返回该流的文件描述符值。

FILE  *fdopen(int _fd,_const char *_modes) 此函数第一个参数为一个文件描述符,第2个参数为封装该流的权限。

3、  POSIX标准下文件IO管理:

1)、打开文件

Int open(_const char *file,int _oflag,…) 第1个参数为欲打开文件的路径,第2个参数为打开文件的方式,第3个参数可有可无,自动创建该文件,它规定了文件的权限。

2)、关闭文件

Int close(int _fd)关闭文件,将相应的内容全部写回文件中,即让数据写回磁盘。

3)、创建文件

Int creat(_const char *_file,_mode_t _mode) 第1个参数为欲创建文件的路径,第2个参数为该文件的访问权限。

4)、文件控制

Int fcntl(int _fd,int _cmd) 第1个参数fd为欲修改属性的文件描述符,第2个参数cmd为相应的操作,常用命令如下:

#define F_DUPFD   0    //复制文件描述符

#define F_GETFD   1    //获得文件描述符标志

#define F_SETFD   2    //设置文件描述符标志

#define F_GETFL   3    //获取文件状态

#define F_SETFL   4    //设置文件状态

5)、读文件内容

Ssize_t  read (int _fd,void *_buf,size_t _nbytes)

从参数fd所指的文件中读取_nbytes数据到buf指针所指的内存中。

6)、写内容到文件

Ssize_t write (int _fd , _const void *_buf , size_t _n)

将buf为起始地址的缓冲区前n个字节写入与打开文件描述符fd关联的文件内。

7)、文件定位

_off_t lseek(int _fd , _off_t _offset , int _whence)

第1个参数为已经打开的文件,第2个参数offset为位移数,第3个参数为参考点。

8)、同步内核缓冲区

为了保证磁盘上实际文件系统与缓存中的内容的一致性,sync、fsync和fdatasync系统调用可以更新缓冲区。

Void sync(void)   将所有修改写的块的缓存排入写队列,然后返回,不等待实际IO操作结束。

Int fsync(int fildes) 等待IO结束,然后返回,多用于于数据库相关的应用程序,它确保修改过的块立即写到磁盘上。

Int fdatasync(int fildes)  只更新内容。

4、  目录文件基本操作

1)、打开目录文件

DIR *opendir(const char *dirname) 打开路径为dirname 的目录,并使一个目录流与它相关联。

2)、关闭目录文件

int closedir(DIR *dirp)  关闭指定的目录流,然后释放与DIR指针关联的结构

3)、读目录内容

Struct dirent *readdir(DIR *dirp)  读取该目录下的文件列表,该函数的返回类型为struct dirent。

Int readdir_r (DIR *dirp ,struct dirent *entry, struct dirent **result) 实现多线程读取目录内容操作

4)、定位目录位置

Long int telldir(DIR *dirp) 目录流相关联的当前位置

Void seekdir(DIR *dirp , long int loc) 类似于文件定位函数fseek(),在目录流上设置下一个readdir()操作的位置。

5)、添加删除目录

Int mkdir(_const char *_path, _mode_t _mode) 第1个参数为欲创建的目录文件路径,

第2个参数为该目录的访问权限

Int rmdir(_const char *_path) 参数为欲删除目录的位置

6)、当前工作路径操作

a)、获取当前工作路径

char *getcwd (char *_buf , size_t _size) //获取当前工作路径到buf中,

如果设置buf为NULL,getcwd()将利用malloc()获取空间,在此情况下,由getcwd()返回的指针需要被释放。

Char *get_current_dir_name(void) 返回当前绝对路径

b)、修改当前工作路径

int chdir (_const char *_path)  //修改进程工作路径,参数为目录路径

POSIX文件及目录管理相关推荐

  1. Python 文件和目录管理(os)

    简述 目录(或文件夹)是文件和子目录的集合 在 Linux 中,操作系统提供了很多的命令(例如:ls.cd),用于文件和目录管理.在 Python 中,有一个 os 模块,也提供了许多便利的方法来管理 ...

  2. 文件目录IBM的LPI复习资料之LPI101-Topic103 :GNU和Unix命令(3)文件和目录管理

    改章节是一篇关于文件目录的帖子 弁言:你可能经已听说过在Linux中一切皆是文件,所以一定要打好础基,把文件和目录的管理如查找.列出.挪动.制复.包打等学踏实.本文针对LPI 101试考,当然读者也可 ...

  3. linux系统命令学习系列-文件和目录管理

    复习上节内容: 1. 定时执行任务命令crontab –e, crontab –l,crontab –r 2. 作业:定义一个定时任务,每分钟向/tmp/test.txt文件输出hello world ...

  4. 文件节点的linux指令,Java工程师必学的Linux命令(一)文件与目录管理

    从本篇文章开始,我将总结一些Java工程师日常研发工作中会使用到的Linux命令,在介绍这些命令的过程中,也会对Linux系统的一些基础知识进行普及.希望对大家工作和学习有所帮助吧. 本篇将从文件与目 ...

  5. linux 文件与目录管理命令

    2019独角兽企业重金招聘Python工程师标准>>> 目录与路径: 1.cd (change directory ) : 改变当前的目录,语法:cd [相对路径/绝对路径] cd ...

  6. 第五章 文件和目录管理

    第五章 文件和目录管理 第一节 目录创建和管理 mkdir 参 数 :     -p 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录     -v或--verbose 显示执行时的详细信息 ...

  7. 实验02 Linux文件和目录管理

    一.实验目的 熟悉Linux的文件和目录管理 二.实验环境 CentOS 6.5系统. 三.实验内容 1. 文件和目录的创建.编辑.复制.移动.删除 2. 文件内容的过滤.排序.去重 3. 文件和目录 ...

  8. Linux 的文件和目录管理类命令

    文件和目录管理类的命令 目录: cd ~[username] ~:指定用户的家目录 cd -:回到上一次所在的目录 路径: 相对路径中: .:当前目录 ..:父目录 pwd: print workin ...

  9. 第七章、Linux 文件与目录管理

    第七章.Linux 文件与目录管理 1. 目录与路径 1.1 相对路径与绝对路径 1.2 目录的相关操作: cd, pwd, mkdir, rmdir 1.3 关於运行档路径的变量: $PATH 2. ...

最新文章

  1. 【Python爬虫学习笔记4】结合Xpath与lxml库解析数据
  2. python在windows的开发环境_Python合集之Python开发环境在Windows系统里面搭建
  3. Springboot:开发时工程启动慢
  4. unity3d技术摄像头跟随_堪比灯厂,新时代智能安全灯光技术,体验大众迈腾GTE IQ.LIGHT...
  5. scrapy.Spider的属性和方法
  6. Nginx下配置小绿锁https
  7. ubuntu16.04--cuda
  8. 中毒后重装系统该注意的几点
  9. python迭代器一般包含_python 迭代器
  10. 服务器租用别让黑客钻了这些空子
  11. 队列加分项:杨辉三角
  12. 计算机二级(C语言)备考
  13. 如何让计算机从固态硬盘启动不了,电脑设置固态硬盘启动的方法
  14. 迷宫小游戏c语言代码,C语言编写的迷宫小游戏-源代码
  15. 使用jquery生成随机二维码的方法
  16. 华安证券手机网上开户流程
  17. Win10笔记本用雷电3接口外接显卡加速tensorflow深度学习步骤
  18. C++的继承和派生(一)父类和派生类(子类)的介绍以及派生类的访问控制
  19. codeforces 900D. Unusual Sequences(莫比乌斯反演)
  20. 首例 3次IPO:前2次申请科创板、创业板均撤回、第3次改为主板、难圆其说变更保代及券商……

热门文章

  1. IOS 自定义NIB视图
  2. HttpClient 学习整理[转]
  3. loopback的作用
  4. 牛客多校8 - Interesting Computer Game(并查集)
  5. CodeForces - 1333D Challenges in school №41(构造+模拟)
  6. HDU - 4641 K-string(后缀自动机)
  7. HDU - 5335 Walk Out(bfs+路径输出+贪心)
  8. python绘图函数教程_OpenCV中的绘图函数
  9. cocos2d-x游戏实例(20)-纵版射击游戏(7)
  10. Ubuntu 16.04 安装 ROS