大多数文件I/O 只需要用到 5个函数 :    open , read , write , lseek , close

本章描述的都是不带缓冲的I/O(read write 都调用内核中的一个系统调用)

文件描述符

对于内核而言,所有文件都通过文件描述符引用。

文件描述符是一个非负整数

打开或创建一个新文件时,内核都将返回一个文件描述符

文件描述符的范围是 0~OPEN_MAX-1

函数 open 和 openat

调用 open 或 openat 可以打开或创建一个文件

int open( const char *path , int oflag , . . . /* mode_t mode */  )

int  openat( int fd , const char *path , int oflag , . . . /* mode_t mode */

仅当创建新文件时才使用最后的课表参数。

oflag参数可以用来说明此函数的多个选项:

O_RDONLY    只读打开

O_WRONLY   只写打开

O_RDWR       读写打开

open 和 openat 返回的文件描述符,一定是最小的未用描述符数值

函数 creat

调用creat函数创建一个新文件

int creat ( const char *path , mode_t mode)

效果等同于 open( path , O_WRONLY | O_CREAT | O_TRUNC , mode )

creat 以只写方式打开所创建的文件。

函数 close

调用此函数关闭一个打开文件。

int close ( int fd )

函数 lseek

每个打开文件都有一个 文件偏移量。 用来度量从文件开始处计算的字节数。

读,写操作都从当前偏移量开始,并增加所读写的偏移量。

off_t lseek ( int fd ,off_t offset , int whence) ;

whence 参数 :

SEEK_SET          从文件开始处便宜offset个字节

SEEK_CUR         从文件偏移量设置当前值加offset

SEEK_END         将偏移量设置为文件长度加偏移量

lseek调用成功后返回新的偏移量

函数 read

从打开的文件中读数据

ssize_t read( int fd, void *buf, size_t nbytes)

调用成功返回读取到的字节数,达到文件末端返回0。

函数 write

向打开文件写数据

ssize_t write ( int fd, void *buf, size_t nbytes)

返回值通常与 nbytes 相同。

文件共享

内核使用 3 种数据结构表示打开文件:

(1) 进程表项

1.文件描述符

2.指向文件表项的指针

(2)文件表项

1.文件状态标志 ( 比如 读,写,非阻塞等 )

2.当前文件偏移量

3.指向V节点表项的指针

(3)V节点表项

每个打开文件都有一个V节点结构。

函数 pread 和 pwrite

属于原子操作。

不更新当前文件偏移量

函数 dup 和 dup2

复制一个现有的文件描述符

int dup( int fd )

int dup2( int fd , int fd2 )

函数返回的新文件描述符与参数fd共享同一个文件表项

调用 dup(fd) 等同于 fcntl ( fd , F_DUPED , 0 )

调用 dup2(fd,fd2) 等同于 close(fd2);fcntl(fd,F_DUPED, fd2);

函数 sync , fsync 和 fdatasync

将缓冲区的数据写入磁盘

函数fcntl

用来改变已打开文件的属性

int fcntl ( int fd , int cmd , . . . /* int arg */  );

参数cmd :

复制一个已有的描述符 F_DUPFD 或 F_DUPFD_CLOEXEC

获取/设置文件描述符   F_GETFD 或 F_SETFD

获取/设置文件状态标志 F_GETFL 或 F_SETFL

获取/设置异步I/O所有权 F_GETOWN 或 F_SETOWN

获取/设置记录锁           F_GETLK       F_SETLK        F_SETLKW

转载于:https://www.cnblogs.com/wchyi/p/5547957.html

UNIX环境高级编程 文件I/O相关推荐

  1. unix环境高级编程——文件i/o

    一.文件描写叙述符 对于内核.通过文件描写叙述符来管理文件.什么是文件描写叙述符? 在unix中,用open或者create建立几个文件时候,内核向进程返回一个整数,用来记录此文件. 以后对文件进行操 ...

  2. UNIX 环境高级编程 文件和目录

    函数stat , fstat , fstatat , lstat stat函数返回与此文件有关的信息结构. fstat函数使用已打开的文件描述符(而stat则使用文件名) fstatat函数 为一个相 ...

  3. unix环境高级编程-文件和目录(1)

    stat.fstat和lstat函数: 一旦给出pathname,stat函数返回与此函数命令文件有关的信息结构.第二个参数buf是指针,指向一个我们必须提供的结构体.该结构体的基本结构是: 文件类型 ...

  4. apue.h头文件(UNIX环境高级编程)

    相信非常多初学<UNIX环境高级编程>的朋友都会遇到一个问题,执行里面的实例(download: http://www.apuebook.com/ )时就出现故障,提示 "错误: ...

  5. UNIX环境高级编程笔记之文件I/O

    一.总结 在写之前,先唠几句,<UNIX环境高级编程>,简称APUE,这本书简直是本神书,像我这种小白,基本上每看完一章都是"哇"这种很吃惊的表情.其实大概三年前,那会 ...

  6. (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  7. 文件和目录(二)--unix环境高级编程读书笔记

    在linux中,文件的相关信息都记录在stat这个结构体中,文件长度是记录在stat的st_size成员中.对于普通文件,其长度可以为0,目录的长度一般为1024的倍数,这与linux文件系统中blo ...

  8. UNIX环境高级编程(第三版 源码及编译好的静态库文件)

    UNIX环境高级编程(第三版) 源码 及 库文件 链接: https://pan.baidu.com/s/1tPY17lWNDEbzkOwZaRUUNg 提取码: 1024 复制这段内容后打开百度网盘 ...

  9. unix环境高级编程(上)-文件篇

    目录 前言 unix基础知识 unix标准化和实现 unix提供的文件IO 文件和目录 标准IO 系统数据文件 前言 笔者将<unix环境高级编程>主要内容总结为三篇:文件篇,进程篇,高级 ...

最新文章

  1. 【Qt】Qt动态库和静态库的创建和使用
  2. ARM 位置无关代码(PIC)的分析理解
  3. Spring AOP 切点(pointcut)表达式
  4. SAP 建立WebService
  5. 苹果手机声音突然变小是怎么回事_苹果7通话声音小,苹果7听筒声音小怎么回事...
  6. 记一次从代码审计到拿下内网edr的过程
  7. Git很简单--图解攻略
  8. 博士毕业的人也会交“智商税”?现实远比我们想象的残酷……
  9. 基于三层结构的CRM系统(Agent X)的设计和开发
  10. [转]CSS3 Media Query实现响应布局
  11. 大数据技术全解之三分虚拟化技术、七分分布式管理、十二分大数据
  12. 持有对方的引用内部类
  13. Atiitt 降低财政赤字风险性实施方案
  14. 使用cnpm yarn下载依赖后,pdfjs-dist包报错
  15. 简单的MediaPlayer+SurfaceView实现视频横竖屏播放
  16. 程序员应了解的那些事(107)之图灵完备
  17. Large Division-----同余模定理(大数的求余)
  18. php音视频边下边播,视频个别片段加旁白,就是我边播放视频边录制旁白或声音...
  19. win10字体设置修改方法【乡巴佬】
  20. 实现原理讲解!我的阿里春招之路分享,灵魂拷问

热门文章

  1. Ubuntu14.04 YouCompleteMe Configure
  2. 为自增(++)自减(--)运算符正名
  3. JUC重要辅助类(同步组件及锁)
  4. ArrayList为何线程不安全,如何解决
  5. zcmu1862(模拟)
  6. 长连接/websocket/SSE等主流服务器推送技术比较
  7. Android Treble架构解析
  8. Android 7.0 Keyguard流程分析
  9. 【问链财经-区块链基础知识系列】 第四十一课 中外银行跨境业务运用区块链技术创新案例对比
  10. Qt 项目视图的便捷类