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. .net单元测试——常用测试方式(异常模拟、返回值测试、参数测试、数据库访问代码测试)

    最近在看.net单元测试艺术,我也喜欢单元测试,今天介绍一下如何测试异常.如何测试返回值.如何测试模拟对象的参数传递.如何测试数据库访问代码.单元测试框架使用的是NUnit,模拟框架使用的是:Rhin ...

  2. 排序算法(冒泡,选择,快速)Java 实现

    冒泡 排序: public static void Bubblesort(int [] a) { for(int x=0;x<=a.length-1;x++) { for(int y=0;y&l ...

  3. windows server 2003 系统重装蓝屏

    错误码:0X0000007B 这个代码和硬盘有关系,不过不用害怕,不是有坏道了,是设置问题或者病毒造成的硬盘引导分区错误.如果您在用原版系统盘安装系统的时候出这个问题,那说明您的机器配置还是比较新的, ...

  4. 关于jQuery $.isNumeric vs. $.isNaN vs. isNaN

    在jQuery中,有几种方式可以判断一个对象是否是数字,或者可否转换为数字. 首先,jQuery.isNaN()在最新版本中已经被移除了(1.7之后),取而代之的是  jQuery.isNumeric ...

  5. IE str.trim() 不兼容问题解决方法

    本文实例分析了javascript在IE下trim函数无法使用的解决方法: 首先,javascript的trim函数在firefox或者chrome下面使用没有问题: 1 2 3 4 5 <sc ...

  6. 说说http请求

    为什么做web前端要了解http标准?因为浏览器要从服务端获取网页,网页也可能将信息再提交给服务器,这其中都有http的连接.web系统既然和http链接有瓜葛,你就必须去了解它.我将从一下几个方面讲 ...

  7. 搭建VPN服务器之PPTP

    搭建VPN服务器之PPTP 1. 查看系统是否支持PPP 一般自己的系统支持,VPS需要验证. [root@oldboyedu ~]# cat /dev/ppp cat: /dev/ppp: No s ...

  8. tomcat gc问题总结

    Java内存泄露监控工具:JVM监控工具介绍  http://developer.51cto.com/art/201203/321431.htm 关于施用full gc频繁的分析及解决  http:/ ...

  9. angularJs 页面筛选标签小功能

    页面html: <div class="bar bar-calm bar-header"> <div class="title">新闻分 ...

  10. ruby 中文支持设置

    学习Ruby的过程中,对于于涉及中文的的代码的时候,需要添加如下代码在首行 # encoding: utf-8 或者EMAC写法 # -*- coding : utf-8 -*- 因为Ruby编译器会 ...