一、在POSIX中的定义

#include <unistd.h>ssize_t read(int fd, void *buf, size_t len);

二、调用read()的可能结果

  2.1 返回值为len;读取到的所有len个字节都被存储在buf中,结果和预期的一致;

  2.2 返回值小于len大于0;读取到的字节被存储到buf中,原因:

   (1)在读取过程中信号中断或在读取中出错;

   (2)可读的数据大于0字节小于len字节在读取len字节之前到达EOF

  2.3 返回0,表示EOF,没有更多的数据可读;

  2.4 由于当前没有数据可用,调用阻塞;在非阻塞模式下,不会发生这种情况;

  2.5 返回-1,并把errno置为EINTR,这表示在读取任何字节之前收到信号;调用可以重新执行;

  2.6 返回-1,并把errno置为非EINTR或EAGAIN的一个值,这表示更严重的错误,重新执行读操作不会成功

三、读入所有字节

ssize_t ret;while (len != 0 && (ret = read(fd, buf, len)) != 0) {if (ret == -1) {if (errno == EINTR) {continue;     }perror("read");break;}  len -= ret;buf += ret;
}   

四、非阻塞读

  文件描述符以非阻塞模式打开(即open调用中指定参数O_NONBLOCK),并且没有数据可读,read调用会返回-1,并设置

  errno值为EAGAIN,而不是阻塞;当以非阻塞模式读文件时,必须检查EAGAIN,否则可能因为丢失数据导致严重错误 

char buf[BUFSIZ];
ssize_t nr;start:
nr = read(fd, buf, BUFSIZ);
if (nr == -1) {if (errno == EINTR) {goto start;      } if (errno == EAGIN) {// 稍后重新读取   } else {// 发生错误
    }
}

  

转载于:https://www.cnblogs.com/soldierback/p/10667799.html

通过read()读文件相关推荐

  1. Java多种方式读文件,追加文件内容,等对文件的各种操作

    一.多种方式读文件内容.1.按字节读取文件内容 2.按字符读取文件内容 3.按行读取文件内容 4.随机读取文件内容 import java.io.BufferedReader;import java. ...

  2. 读一个文件的java程序_java 读文件的几种方法(一)

    先前使用一直很混乱的使用过这些方法,但都没有好好做过总结. 这两天趁有空,小结一下. 1.输入输出流 说起 java的 读写文件不得不说java中的输入输出流对象, 被读取的对象为输入流(如某个文件, ...

  3. c++ 读文件 文件指针 继续读_FatFs文件系统使用笔记

    关于FatFs文件系统的指引 关于FATFS的使用记录一.提前说明二.各文件说明三.使用说明       3.1 diskio.c函数的编写       3.2 f_open读写性质说明        ...

  4. Java8读文件仅需一行代码

    版权声明:本文为博主chszs的原创文章,未经博主允许不得转载. https://blog.csdn.net/chszs/article/details/44023039 Java8读文件仅需一行代码 ...

  5. getline及读文件总结

    今天由华为软件精英挑战赛的要求,读文件这块自己进行了总结,主要是泛型以及关联容器这块需要加强,现在总结了读文件的iterator的用法. 1.iterator inserter(essential C ...

  6. python读文件操作-python 之文件操作

    使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.txt') try ...

  7. python读文件写文件-python 文件读写操作

    读文件 打开一个文件用open()方法(open()返回一个文件对象,它是可迭代的): >>> f = open('test.txt', 'r') r表示是文本文件,rb是二进制文件 ...

  8. python写文件读文件-Python 实例:读写文件

    原标题:Python 实例:读写文件 读写文件是最常见的IO操作.内置了读写文件的函数,用法和的读写文件非常类似.在磁盘上读写文件的功能都是由提供的,现代不允许普通的程序直接操作磁盘,所以,读写文件就 ...

  9. python读文件每一行、并把这行替换-Python按行读文件

    1. 最基本的读文件方法: # File: readline-example-1.py file = open("sample.txt") while 1: line = file ...

  10. python写文件读文件-Python 读写文件和file对象的方法(推荐)

    1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.tx ...

最新文章

  1. 工业机器人焊钳制作_一种工业焊接机器人及其冷却装置的制作方法
  2. Flash播放控件属性详解
  3. 网页打开微信公众号关注界面
  4. 【springBoot】注解的详解
  5. leetcode题解54-螺旋矩阵
  6. 设计Whats App
  7. Failed to load class org.slf4j.impl.StaticLoggerBinder
  8. oracle共享锁与排他锁 详解
  9. java 如何将word 转换为ftl_3种方法轻松将PDF转换为Word文档,办公必备
  10. 游戏帧数对比测试监控软件,8款游戏帧数对比实测 5800X多数超越11900K
  11. java beanshell_使用beanshell实现JAVA代码动态运行
  12. 线性代数 | (4) n维向量
  13. GIS开发之二维地下管线综合管理系统(Arcgis)第四节 查询(2)
  14. STM32用cube配置FATFS模式下SPI读写SD卡
  15. GDAL python教程基础篇(2)——用OGR写入矢量数据
  16. 【idea快捷键与其它工具插件】
  17. 程序设计语言中的 一等公民,二等公民,三等公民
  18. virtualpc2007 95/98系统驱动,虚拟工具,softice安装
  19. 永中科技破产与鲍尔默访华
  20. 考研数据结构判断题整合_做题版

热门文章

  1. 【linux】解决设置CentOS7虚拟机使用静态IP的常见错误解决方案
  2. 关于用Java程序实现8421码权限管理 -第三部分
  3. OpenGL透视投影
  4. Cocos2d开发系列
  5. 更换介质︰请把标有“Debian GNU/Linux 7.11.0 _Wheezy_ - Official amd64 DVD Binary-1 20160605-17:36“盘片插入驱动器”
  6. 台积电业绩出现下滑,开始进一步向中国大陆芯片企业示好
  7. 计导 第 10 章 软件工程
  8. pandas库--DataFrame常用操作
  9. 读书笔记-人月神话4
  10. 原生Mysql之and和or混合使用