UNIX系统中的大多数文件I/O只需要用到5个函数:open,read,write,lseek以及close

文件描述符 文件描述符是一个非负整数,所有打开的文件都通过文件描述符引用 文件描述符的变化范围是0-OPEN_MAX,OPEN_MAX是每个进程最多打开的文件

1、open函数

  #include<fcntl.h>

  int open(const char* pathname,

       int flag,

       mode_t mode

      ); //若成功则返回文件描述符,若出错则返回-1

  flag打开方式有3种:O_RDONLY 只读打开

              O_WRONLY 只写打开

            O_RDWR 读、写打开

  这三个是互斥的,不可以同时使用,以下常量是选用的:

    O_APPEND      每次写操作都写入文件的末尾

    O_CREAT        如果指定文件不存在,则创建这个文件

    O_EXCL         如果要创建的文件已存在,则返回 -1,并且修改errno的值

    O_TRUNC        如果文件存在,并且以只写/读写方式打开,则清空文件全部内容

    O_NOCTTY       如果路径名指向终端设备,不要把这个设备用作控制终端。

    O_NONBLOCK     如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O,设置为非阻塞模式(nonblocking mode)

  大多数实现将O_RDONLY定义为0,O_WRONLY定义为1,O_RDWR定义为2

  mode参数只有创建新文件时才使用,用来设置文件访问权限的初始值。

  S_IRUSR,S_IWUSER,S_IXUSR,S_IRGRP,S_IWGRP,S_IXGRP,S_IROTH,S_IWOTH,S_IXOTH.其中R:读,W:写,X:执行,USR:文件所属的用户,GRP:文件所属的组,OTH:其他用户。

2、create函数

  #include <fcntl.h>

  int create(const char* pathname,

        mode_t mode

       );     //若成功则返回为只写打开的文件描述符,若出错则返回-1

  等效于open(pathname,O_WRONLY | O_CREATE | O|TRUNC,mode);

  create的不足:它以只写方式打开所创建的文件,当需要先写文件,然后读该文件时,可以用open代替,如:

    open(pathname,O_RDWR | O_CREATE | O_TRUNC,mode);

3、read函数

  #include <unistd.h>

  ssize_t read(int fd,               //文件描述符

             void *buf,              //要写入内核对象的数据

             size_t size            //空间大小      

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

4、write函数

  #include<unistd.h>

  sszie_t write( int fd,            //文件描述符

               const void *buf,        //要写入内核对象的数据

          size_t size          //写入数据大小       

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

5、lseek函数

  lseek为一个打开的文件设置其偏移量

  #include <unistd.h>

  off_t lseek(int fd,            //定位文件描述符号

            off_t offset,         //定位位置

            int whence          //定位参照点:文件开始位置/文件结束位置/文件当前位置

           );              //若成功则返回新的文件偏移量,若出错则返回-1

  参数whence:SEEK_SET:该文件的偏移量为文件开始位置offset个字节

         SEEK_CUR:当前位置加offset

             SEEK_END:文件结束位置加offset

6、close函数

  #include <unistd.h>

  int close(int fd);  //若成功则返回0,若出错则返回-1

  关闭一个文件时还会释放该进程加在该文件上的所有记录锁,当一个进程终止时,内核自动关闭它所有打开的文件

Linux学习笔记10——文件I/O之一的更多相关文章

  1. Linux 学习笔记 5 文件的下载、压缩、解压、初步认识yum

    写在前面 上节我们通过简单的几组命令,已经完全的实现了文件的移动.删除.更名.以及复制,我们最常用的基本玩法,本节将带着大家学习压缩.解压的相关步骤. Linux 学习笔记 4 创建.复制.移动.文件 ...

  2. Linux学习笔记之文件权限

    前言: 说起文件权限,大家在windows下应该很熟悉就对文件右键属性,然后配置一点什么读写之类的权限,然后可以分配到每个的人. 对于linux 我先为大家介绍一个使用者和组和其他的概念说明一下 文件 ...

  3. Linux学习笔记 -- 话说文件

    文件基本属性 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定. 在Li ...

  4. Linux学习笔记05—文件与目录权限

    1. 绝对路径与相对路径绝对路径:路径的写法一定由根目录 ‘/’写起,例如 /usr/local/mysql 这就是绝对路径相对路径:路径的写法不是由根目录 ‘/’写起,例如:首先用户进入到/, 然后 ...

  5. linux 学习笔记之文件与管理

    前言: 对于windows来说,文件的系统管理都是非常简单的(这个应该有一个捂脸),通常就是重命名,复制,移动,删除,查看文件属性,查看文件内容,寻找文件.其实在图形化行中的linux也是有这样子功能 ...

  6. Javaweb学习笔记10—文件上传与下载

    今天来讲javaweb的第10阶段学习.文件的上传与下载,今天主要说的是这个功能的实现,不用说了,听名字就是外行人也知道肯定很重要啦. 老规矩,首先先用一张思维导图来展现今天的博客内容.       ...

  7. linux学习笔记一----------文件相关操作

    一.目录结构 二.文件管理操作命令(有关文件夹操作,使用Tab键自动补全文件名(如果多个默认第一个)) 1.ls 查看目录信息:ls -l 查看目录详细信息(等价于ll 某些系统不支持) 2.pwd ...

  8. Linux 学习笔记 查看文件内容诸多命令

    查看文件内容 1.查看文件统计信息 stat 提供文件系统上某个文件的所有状态信息 2.查看文件类型 file 用来查看文件类型 (该命令将文件分成3类:文本类型:可执行文件:数据文件) 如果你有从未 ...

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

    一.文件共享 内核使用三种数据结构表示打开的文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响. 1.每个进程在进程表中都有一个记录项,记录项中包含有一张打开文件描述表 2.内 ...

随机推荐

  1. 今天把PHP复习了一下.

    记录一下今天复习内容. $_GET[''] $_POST $_SESSION $_COOKIE 常用的 $var='a'; global 全局变量$GLOBALS[''] $$var (动态变量名的变 ...

  2. android下面res目录

    1. 相关文件夹介绍      在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的.assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件 ...

  3. asp IIS部署An error occurred on the server when processing the URL错误提示解决

    An error occurred on the server when processing the URL. Please contact the system administrator.If ...

  4. Oracle 检验身份证是否正确的存储过程

    ) ) ); ); ); ); ); ); ); ; , , , , , , , , , , , , , , , , , ); ;  , ) );  ..  loop )) ) ); , )), ), ...

  5. Lost connection to MySQL server at ‘reading initial communication packet', system error: 0 mysql远程连接问题

    在用Navicat for MySQL远程连接mysql的时候,出现了 Lost connection to MySQL server at ‘reading initial communicatio ...

  6. QT UI 如果发现布局之后,button不在父widget的中间

    如果发现布局之后,button不在父widget的中间: 调整父widget的布局参数:

  7. wel

    欢迎来到mathant.com 这个网站是什么 这个网站是我搭建在阿里云vps上的个人网站.目前的用途是充当个人博客和云存储,当然它的功能不止如此.我会在以后的日子里完善他,希望他能变得更好.目前我在 ...

  8. python基础之元组(Tuple)、字典(Dictionary)详解

    元组定义 元组是另一个数据类型,类似于List(列表). 元组用”()”标识.内部元素用逗号隔开.但是元素不能二次赋值,相当于只读列表. 举例: tuple = ( ‘abcd’, 786 , 2.2 ...

  9. uboot全局变量

    一.global_data(include/asm-arm/global_data.h) typedef struct global_data { bd_t *bd; unsigned long fl ...

  10. git 基础命令

    1.git init git 初始化仓库 2.git add . git 添加全部文件 3.git add xxx.txt   git 添加单独文件 4.git commit -m "提交的 ...