read函数从打开的设备或文件中读取数据。

#include <unistd.h>

ssize_t read(int fd, void *buf, size_t count);

返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调用read之前已到达文件末尾,则这次read返回0

参数count是请求读取的字节数,读上来的数据保存在缓冲区buf中,同时文件的当前读写位置向后移。注意这个读写位置和使用C标准I/O库时的读写位置有可能不同,这个读写位置是记在内核中的,而使用C标准I/O库时的读写位置是用户空间I/O缓冲区中的位置。

有些情况下,实际读到的字节数(返回值)会小于请求读的字节数count,例如:

1.读常规文件时,在读到count个字节之前已到达文件末尾。

2.从终端设备读,通常以行为单位,读到换行符就返回了。

情况1代码演示:

#include "./common/head.h"/*功能:*打开一个文件,第一次读取10个字符,第2次再读取10个字符*验证当读到文件末尾时,read的返回参数*注意:文件中换行也占一个字符,如test.txt中5和h后面就有一个换行,可以用NodePad++软件来看该文件中所有隐藏的字符,便于调试。*test.txt如下(用ll命令查看,占15字节):
12345
abcdefgh
*/int main(int argc, char **argv)
{if(argc != 2){    //./a.out test.txtprintf("usage: cmd filename\n");exit(1);}int fd = open(argv[1], O_RDONLY);if(fd < 0){perror("open");exit(1);}int n;char buff[20] = {0};n = read(fd, buff, 10);    //第1次读取10个字节prinrf("%d bytes has readed\n", n);    //文件未被读完,打印10//打印读到的字节for(int i = 0; i < n; i++){printf("%c", buff[i]);}printf("\n");n = read(fd, buff, 10);    //第2次读取10个字节,当读到第5个字节时,已读到文件末尾prinrf("%d bytes has readed\n", n);    //文件未被读完,打印5for(int i = 0; i < n; i++){printf("%c", buff[i]);}printf("\n");close(fd);return 0;
}

结果:

解析:

第一次读取10个字节:

12345\nabcd

代码打印换行

第二次读取5个字节(虽然代码中count传入的是10,但已经读到文件末尾,只读到5个字符):

efgh\n

代码打印换行

情况2代码演示:

#include "common/head.h"/*功能:*从标准输入读取数据,并打印出来
*/int main()
{char buff[20] = {0};size_t n = read(STDIN_FILENO, buff, 10);    //从标准输入中读取10字节。STDIN_FILENO宏在unistd.h中被定义0,代表标准输入if(n < 0){perror("READ STDIN");exit(1);}//当终端输入回车时,read函数才会开始读,并执行到这里printf("%d bytes has readed from stdin\n", n);for(int i = 0; i < n; i++){printf("%c", buff[i]);}putchar(10);    //\n的ascii码是10,相当于输出一个换行return 0;
}

 结果:

 解析:

在终端输入:

1 2 3\n

终端设备以换行为单位,read函数开始执行,读到6个字符(包括空格和换行)

然后调用printf打印读到的字符

最后puchar一个换行

拓展:

如果终端的输入超过10个字节,剩下的字符会被bash接住,并且尝试解析这些字符所代表的命令。

产生这一现象是因为标准输入中的数据像水流一样传输过来,当bash调用了./a.out后,bash会转入后台运行,当./a.out程序结束后,bash又从输入流中获取数据。

 write函数向打开的设备或文件中写数据。

#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);

返回值:成功返回写入的字节数,出错返回-1并设置errno

read函数、write函数相关推荐

  1. Java箭头函数,lambda函数

    Java箭头函数,lambda函数 lambda表达式实质就是一种语法糖,(建议尽量不要使用lambda表达式,代码太简洁,难懂,难以调试) lambda表达式的简单例子: 不需要参数,返回5 ()- ...

  2. C++ 笔记(13)— 函数(函数声明、函数定义、函数调用[传值、指针、引用]、函数参数默认值、函数重载)

    每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 1. 函数声明 函数声明告诉编译器函数的名称.返回类型和参数.函数声明包括以下几个部分: ret ...

  3. python nums函数_Python函数

    一.简介 函数是可重用的程序代码块.函数的作用,不仅可以实现代码的复用,更能实现代码的一致性.一致性指的是,只要修改函数的代码,则所有调用该函数的地方都能得到体现. 函数用关键字def来定义,def关 ...

  4. Python源码学习:Python函数浅析-函数闭包

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 上一篇分析了函数参数的分析后,本文分析函数闭包的实现.函数闭包即函数定义和函数表达式 ...

  5. querywrapper or and嵌套_两个经常用的逻辑函数AND函数,OR函数

    在逻辑函数里AND函数,OR函数是使用频率是比较高的函数,但像NOT函数和XOR两个函数就略显鸡肋了. 今天我们重点对前两个函数进行讲述,后两个大家可以自行查看下,知道就行了,等哪天可以用上的时候再进 ...

  6. R语言使用trimws函数:trimws函数去除(删除、remove)字符串头尾的空格

    R语言使用trimws函数:trimws函数去除(删除.remove)字符串头尾的空格 目录 R语言使用trimws函数:trimws函数去除(删除.remove)字符串头尾的空格

  7. R语言使用integrate函数进行函数积分计算实战

    R语言使用integrate函数进行函数积分计算实战 目录 R语言使用integrate函数进行函数积分计算实战 #自定义函数 #积分操作

  8. R语言ggplot2使用geom_line函数geom_point函数可视化哑铃图、并对哑铃图进行排序(reorder dumbbell plot)

    R语言ggplot2使用geom_line函数geom_point函数可视化哑铃图.并对哑铃图进行排序(reorder dumbbell plot) 目录

  9. R语言ggplot2可视化:将dataframe和数据列名称传递给函数通过函数进行ggplot2可视化输出

    R语言ggplot2可视化:将dataframe和数据列名称传递给函数通过函数进行ggplot2可视化输出 目录

  10. R语言max函数min函数计算各种数据对象最大值最小值实战

    R语言max函数min函数计算各种数据对象最大值最小值实战 目录 R语言max函数min函数计算各种数据对象最大值最小值实战 #基本语法

最新文章

  1. EnterpriseDB Migration 迁移工具使用测试(2)
  2. 水星逆行,诸事不宜,瞬间爆炸。
  3. 皮一皮:直男的拍摄水平...
  4. mysql常用命令,mysql语法,mysql登陆、创建数据库、创建用户、更改密码、为用户授权...
  5. how is navigation list item click event handled - actually no logic done
  6. atcoder 076
  7. java学习(81):静态代码块
  8. mysql的四层架构_分布式数据库服务器的四层架构
  9. java list容器_Java 容器列表(三)- ArrayList
  10. k8s 安装_二进制安装k8s集群总结
  11. 如何在一台window系统上演示Erlang分布式程序
  12. java 开源客服系统_编程浪子客服系统开源啦
  13. 新会计准则与旧版内容的不同比较
  14. 爬取今日头条新闻,并导入execle中(主要用了selenium)
  15. 张萌韩墨羽——Toolbar和DrawerLayout+SlideMenu 2种方式实现抽屉侧滑
  16. Android 屏蔽Power键 Home键
  17. Scrapy项目 - 数据简析 - 实现豆瓣 Top250 电影信息爬取的爬虫设计
  18. 计算机与模拟实验的论文,作业模拟论文,关于森林作业的计算机模拟相关参考文献资料-免费论文范文...
  19. Antd组件库的使用
  20. PowerPoint2007无法将Excel图表转换为图形对象

热门文章

  1. 程序员需要了解的先秦文学
  2. 英文期刊催稿信模板_SCI论文催稿信模板
  3. OpenGL学习笔记九——光照3(实现三种光照类型:平行光,点光源,聚光灯)
  4. 蓝牙速率详细分析和提升方式【附IOS,安卓速率测试报告】
  5. clickhouse开窗函数之同比环比
  6. Android游戏添加游戏动画,Android游戏中的动画制作
  7. 彗星通行证的积分规则是什么?
  8. 在命令行下转换磁盘分区格式为GPT或MBR(会丢失所有数据)
  9. 计算机白板培训报道,学习电子白板心得体会
  10. STM32毕业设计题目大全