Linux学习笔记11——文件I/O之二

一、文件共享

  内核使用三种数据结构表示打开的文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。

  1、每个进程在进程表中都有一个记录项,记录项中包含有一张打开文件描述表
  2、内核为所有打开文件维持一张文件表
  3、每个打开文件都有一个v节点结构,v节点包含了文件类型和对此文件进行各种操作的函数的指针。PS:Linux中没有使用v节点,而是使用了通用i节点结构。

  

  文件描述符标志只用于一个进程的一个描述符

  文件状态标志适用于指向该给定文件表项的任何进程中的所有描述符

二、原子操作

  1、pread函数和pwrite函数

    #include <unistd.h>
    ssize_t pread(int fd,        //要读取数据的文件描述符

           void *buf,      //数据缓存区指针,存放读取出来的数据

           size_t nbytes,    //读取数据的字节数

           off_t offset      //读取的起始地址的偏移量,读取地址=文件开始+offset

           );          //返回值:读到的字节数,若已到文件结尾则返回0,若出错则返回-1

    ssize_t pwrite(int fd,          //要写入数据的文件描述符

           const void *buf,    //数据缓存区指针,存放要写入文件中的数据

           size_t nbytes,    //写入数据的字节数

           off_t offset      //写入起始地址的偏移量,写入地址=文件开始+offset

           );          //返回值:若成功则返回已写的字节数,若出错则返回-1

    调用pread相当于顺序调用lseek和read,但是调用pread时,无法中断其定位和读操作,且不更新文件指针。

    调用pwrite相当于顺序调用lseek和write。

  2、原子操作指的是由多步组成的操作,如果该操作原子地执行,则要么执行完所有步骤。要么一步也不执行,不可能只执行所有步骤的一个子集。

三、dup和dup2函数

    #include <unistd.h>
    int dup(int fd);           //返回的新文件描述符一定是当前可用文件描述符的最小数值
    int dup2(int fd,int fd2);         //用fd2参数指定新描述符的数值

    两个函数都可用来复制一个现存的文件描述符,两函数的返回值:若成功则返回新的文件描述符,若出错则返回-1。

    这两个函数的用处:返回的新文件描述符与参数fd共享一个文件表项,达到共享一个文件状态标志(读、写、添加等)以及同一当前文件偏移量。如下图所示:

四、sync、fsync和fdatasync函数

  虽然延迟写减少了磁盘读写次数,但是却降低了文件内容的更新速度,使得欲写到文件中的数据在一段时间内并没有写到磁盘上。当系统发生故障时,这种延迟可能造成文件更新内容的丢失。sync、fsync和fdatasync函数可以保证磁盘上实际文件系统与缓冲区高速缓存中内存的一致性。

  #include <unistd.h>
  int fsync(int fd);
  int fdatasync(int fd);        //这两个函数的返回值:若成功则返回0,若出错则返回-1

  void sync(void);

  fsync :只对由文件描述符fd指定的单一文件起作用,并且等待写磁盘操作结束,然后返回
  fdatasync :只影响文件的数据部分,而除数据外,fsync还会同步更新文件的属性
  sync :只是将所有修改过的块缓冲区排入写队列,然后就返回,它并不等待实际写盘操作结束

  

五、fcntl函数 

  #include<fcntl.h>

  int fcntl(int fd,int cmd,int arg);    //返回值:若成功则依赖于cmd,若出错则返回-1

  fcntl函数有5种功能:1、复制一个现有的描述符 cmd=F_DUPFD

            2、获得/设置文件描述符标记 cmd=F_GETFD或F_SETFD

            3、获得/设置文件状态标志 cmd=F_GETFL或F_SETFL

            4、获得/设置异步I/O所有权 cmd=F_GETOWN或F_SETOWN

            5、获得/设置记录锁 cmd=F_GETLK、F_SETLK或F_SETLKW

时间: 2024-10-10 14:54:09

Linux学习笔记11——文件I/O之二的相关文章

linux学习笔记-特殊文件

linux中的特殊文件 [[email protected] ~]# cat /etc/passwd  用户数据库,下面是每个单元对应的意义解释 root:   x: 0  :0   :root :/root      :/bin/bash 用户名:x:uid:gid:注释:用户家目录:用户使用的shell x是密码位 [[email protected] ~]# cat /etc/group 类似于passwd,说明的不是用户而是组 root: x:0   : 组名:x:组id:用户列表,每个

linux 学习笔记之文件与管理

前言: 对于windows来说,文件的系统管理都是非常简单的(这个应该有一个捂脸),通常就是重命名,复制,移动,删除,查看文件属性,查看文件内容,寻找文件.其实在图形化行中的linux也是有这样子功能,但是几乎没有多少人会去使用图形化的linux(一脸懵B).命令行中的重命名,复制,移动,删除是如何的呢?接下来为大家一一介绍. 绝对路径和相对路径 绝对路径:由根目录(/)开始写起的档名或目录名称,例如/home/dmtsai/.bashrc; 相对路径:.相对于目前路径的档名写法例如./home

Codeigniter入门学习笔记11—文件上传

很久很久以前学习Codeigniter的笔记记录,很随意,但都是自己记录的,希望对需要的人有所帮助. 本文使用word2013编辑并发布 Postbird | There I am , in the world more exciting! Postbird personal website : http://www.ptbird.cn 文件上传 1.手动创建好上传目录 2.controllers/user ? 3.views/user/fileAction.php ????//表单需要强调是文

Linux学习笔记(文件打包与解压缩)

常用命令: zip: 打包 :zip something.zip something (目录请加 -r 参数) 解包:unzip something 指定路径:-d 参数 tar: 打包:tar -zcvf something.tar something 解包:tar -zxvf something.tar 指定路径:-C 参数 linux 上常用的压缩/解压工具, 主要讲解 zip,rar,tar 在讲 Linux 上的压缩工具之前,有必要先了解一下常见常用的压缩包文件格式. 在 Window

Linux学习笔记&lt;十三&gt;——文件压缩、解压缩和归档

压缩.解压缩命令: 1.compress/uncompress:压缩格式为Z,文件后缀为.Z compress /path/to/file uncompress /path/to/file.Z 2.gzip/gunzip/zcat:压缩格式为gz,文件后缀为.gz gzip [OPTION] /path/to/file:,压缩文件保存在被压缩文件的目录,压缩完成后会删除原文件 -v|verbose:显示指令执行过程 -d:解压缩,解压缩完成后删除原压缩文件 -#:1-9,指定压缩比,默认为6,数

linux 学习笔记 查看文件篇

1 diff 比较两个文件 #diff -y test.txt test.txt 输出源文件和目标文件的全部.分左右两栏. aaaa aaaa bbb | b ccc < > ddd 注  | 表示 两个文件之中不同的行     <表示 该行在源文件 左边的文件中 >表示  该行在目的文件 右边的文件中 #diff -s test1.txt test2.txt 仅仅输出这两个文件不一样的地方 #diff bBsw  test1.txt test2.txt >> a.tx

linux —— 学习笔记(文件、文件夹操作)

目录:1.常用的文件文件夹操作 2.文件属性的设置 1.常用的文件文件夹操作 mkdir  创建文件夹 -p 如果指定 a/b/c 时 a .b 不存在,一起创建出来 cp       复制文件或文件夹 -r 复制文件夹 rmdir   删除空的文件夹 -p 类似于mkdir 沿途为空则一起删除 rm       删除文件或文件夹 -rf 递归静默删除 mv      移动文件(重命名)       如果目标和源 目录未改变,则移动的效果为重命名 2.文件属性的设置 chmod  改变文件的mo

Linux学习笔记11

2.识别共享服务器共享目录smbclient -L //172.25.254.250Enter root's password: 直接回车Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1] Sharename       Type      Comment        ---------       ----      -------        westos1         Disk      test share        westos2

Linux学习笔记&lt;十一&gt;——文件查找和文件系统ACL

文件查找: 1.locate:非实时的,模糊查找,查找是根据全系统文件数据库进行的: 速度快 文件数据库是每次关机前自动完成更新的 updatedb:用于手动生成文件数据库 2.find: 实时 精确查找 支持众多查找标准 遍历指定目录中的所有文字完成查找 速度相对较慢 find 查找路径 查找标准 查找到以后的处理运作 查找路径:可省略,默认为当前目录 查找标准:可省略,默认为指定路径下的所有文件 处理运作:可省略,默认为显示在屏幕上 查找标准: -name 'FILENAME':对文件名作精