文档章节

文件IO操作原理(02)——read函数

乌合之众
 乌合之众
发布于 2014/11/18 14:19
字数 417
阅读 50
收藏 0

文件IO操作原理02

2、read函数

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

fd:打开的文件描述符

buf:buf缓冲区

count:读取的字节数

read函数的功能是从fd文件中读取至多count个字节的内容保存到buf中。函数返回读取到的字节数。如果函数返回-1,表示读取失败(读取失败会设置errno错误标识位)。返回0,表示读取到文件尾。

char buf[1024]={0};

int len=0;

len=read(STDIN_FILENO,buf,1024);

从标准输入文件中读取至多1024个字节内容到buf中。

一个进程默认打开了三个文件描述符。每个文件描述符默认有一个8192个字节大小的缓冲区。

STDIN_FILENO 标准输入流文件,文件描述符值为 0

STDOUT_FILENO 标准输出流文件,文件描述符值为 1

STDERR_FILENO 标准错误流文件,文件描述符值为 2

 

非阻塞模式读取标准输入流文件

   1: #include <unistd.h>
   2: #include <fcntl.h>
   3: #include <errno.h>
   4: #include <string.h>
   5: #include <stdlib.h>
   6: 
   7: #define MSG_TRY "try again\n"
   8: 
   9: int main()
  10: {
  11:     char buf[128];
  12:     int fd=open("/dev/tty",O_RDONLY | O_NONBLOCK);
  13:     int len=0;
  14:     //文件打开失败
  15:     if(fd<0){
  16:         perror("open /dev/tty ");
  17:         exit(1);
  18:     }
  19:     while(1){
  20:         //非阻塞模式,不会停在这里等待输入然后才下一步
  21:         len=read(fd,buf,128);
  22:         if(len<0){
  23:             if(errno==EAGAIN){
  24:                 sleep(3);
  25:                 write(STDOUT_FILENO,MSG_TRY,strlen(MSG_TRY));
  26:                 continue;
  27:             }
  28:             perror("read /dev/tty ");
  29:             exit(0);
  30:         }
  31:         break;
  32:     }
  33:     //读取到的内容写入标准输出流文件
  34:     write(STDOUT_FILENO,buf,len);
  35:     close(fd);
  36:     return 0;
  37: }

© 著作权归作者所有

乌合之众
粉丝 14
博文 90
码字总数 79438
作品 1
海淀
程序员
私信 提问
C++ 跨平台多功能扩展库 - cpgf

cpgf 可为C++代码增加反射(元数据)、序列化、以及Luau和Python脚本绑定等功能,且不依赖任何外部工具。 cpgf 的目标是扩展C++语言,其中包含许多易于使用的功能,这些功能仅在其他更高级别...

wqking
2018/09/17
0
0
ECSHOP_jquery兼容方案

ecshop把AJAX事件和JSON解析的模块放在common/transport.js之中,可以说它也有自己封装的一套工具,这其实是很正常的。 但恰恰的,在封装JSON各种方法的同时对object的模型进行了重写,这个就...

喵王不瞌睡
2014/07/09
0
0
周公51CTO博客有价值文章整理

说明:为方便朋友们查看本博客的文章,特地整理了本博客中周公认为值得一看的文章,不过有些文章因为年代久远且技术更新快的原因,里面所讲述的方法或者理论不再适合,请大家斟酌。 asp.net ...

周金桥
2018/06/29
0
0
项目协作管理--Mingle

Mingle 是关于项目的协作管理(非开源软件)。Mingle的独特之处以及它在敏捷项目管理和团队协作方面的强大功能包括: Mingle并不局限于敏捷方法论——它默认提供了三种软件开发模版(Scrum, ...

匿名
2008/11/10
6.9K
0
Attention Recorder

Everything we do online—what we browse, what feeds we read, what we search for—increasingly represents who we are. This “Attention Data” has real value and needs to be prote......

匿名
2008/09/19
374
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux使用源码包安装软件

前言: 最近整理一些以前的学习笔记。 过去都是存储在本地,此次传到网络留待备用。 源码包 Linux软件多数免费、开源,是开发人员编写的,具有很强可读性的一组相关代码文本。 源码包 --> 编...

迷失De挣扎
今天
2
0
IPv4如何转换为IPv6?

ipv6已经逐渐在应用,现在已经有很多的运营商支持ipv6,前天我们也发布了如何让电脑使用ipv6地址?有很多朋友在问?ipv6有什么作用,它的表示方式是什么,今天我们来一起来详细了解下ipv6相关计...

xiangyunyan
今天
3
0
小白讲网络安全系列

注入攻击防护 XSS注入 SQL注入 命令注入 文件上传 文件解压缩 CSRF防护 对称加密 非对称加密 数字证书 数字签名 完整性校验 消息验证码 单向散列Hash函数 口令单向加密算法 审计日志 认证鉴权...

一刀
今天
2
0
MYSQL 嵌套事务(SAVEPOINT) 与Spring 事务传播

摘要 savepoint 关键字可以实现嵌套事务。结合savepoint关键字,更方便理解spring的事务传播。 事务嵌套 初始化表脚本 drop table t;create table t(a int, primary key(a)); 开启事务 my...

liangxiao
今天
4
0
Chrome OS 更新新版本可让Linux访问USB连接的Android设备

谷歌再次为Chrome OS带来了重大版本更新,使版本号达到了75。本次更新的一大亮点就是允许在Chrome OS上运行的Linux能够识别通过USB方式连接的Android设备,能够让用户使用Linux进行调试等等。...

linuxCool
昨天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部