zoukankan      html  css  js  c++  java
  • Linux学习笔记10——文件I/O之一

    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

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

  • 相关阅读:
    AtCoder Beginner Contest 145
    [kuangbin带你飞]专题二十二 区间DP
    记录学习记录你
    湖南大学七月夏令营-计算机科学与技术专业
    软件工程 之UML六大关系
    IDEA 中JAVAFX配置
    Vue项目打包后在本地运行:express本地服务器
    真机测试的方法
    解决坑的链接
    vue中实现先请求数据再渲染dom
  • 原文地址:https://www.cnblogs.com/zjzsky/p/3473589.html
Copyright © 2011-2022 走看看