Linux I/O(输入和输出)

2023-11-11

1.文件I/O

1)文件描述符:对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符通常是一个小的非负整数,内核用它标识一个特定进程正在访问的文件。当内核打开一个已有文件或创建一个新文件时,它返回一个文件描述符。

2)按照惯例,UNIX系统shell使用文件描述符0(STDIN_FILENO)与进程的标准输入相关联,文件描述符1(STDOUT_FILENO)与标准输出相关联,文件描述符2(STDERR_FILENO)与标准出错输出相关联。这是各种shell以及很多应用程序使用的惯例,而与UNIX内核无关。尽管如此,如果不遵照这种惯例,那么很多UNIX系统应用程序就不能正常工作。

3)可用的文件I/O函数——打开文件,读文件,写文件等。UNIX系统中的大多数文件I/O只需用到5个函数:open、read、write、lseek以及close。它们是不带缓冲的I/O,都使用文件描述符。在使用read和write函数时,选定不同大小的缓冲区(保存读和写的数据),效率是不同的。存在一个最佳效率的缓冲区大小,就是缓冲区大小等于文件系统的块长。

2.标准I/O

1)对于标准I/O库,它们的操作则是围绕流进行的。当用标准I/O库打开或创建一个文件时,使用一个流与一个文件相关联。当打开一个流时,标准I/O函数fopen返回一个指向FILE对象的指针。该对象通常是一个结构,它包含了标准I/O库为管理该流所需要的所有信息,包括:用于实际I/O的文件描述符,指向用于该缓冲区的指针、缓冲区的长度、当前在缓冲区中的字符数以及出错标志等。

2)预定义了三个标准I/O流,分别为三个文件指针stdin,stdout和stderr。

3)标准I/O库提供缓冲的目的是尽可能减少使用read和write调用的次数。它对每个I/O流自动地进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的麻烦。标准I/O提供三种类型的缓冲:全缓冲、行缓冲和不带缓冲。

3.两者的区别:

1)前者属于低级IO,后者是高级IO。

2)前者返回一个文件描述符(用户程序区的),后者返回一个文件指针。

3)前者无缓冲,后者有缓冲。
4)前者与 read, write 等配合使用, 后者与 fread, fwrite等配合使用。
5)后者是在前者的基础上扩充而来的,在大多数情况下,用后者。

有关它们的介绍也可参考:

http://hi.baidu.com/woshihaoge/blog/item/ef4fadfdbcead71008244d43.html 

http://hi.baidu.com/36470902/blog/item/275de511186fe618b8127b8d.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux I/O(输入和输出) 的相关文章

随机推荐

  • LTV-MPC

    For compatibility with the adaptive mode the plant model specified in your controller object must be LTI state space OK
  • java中文档注释的标记是_javadoc中文档注释标记的使用

    javadoc中文档注释标记的使用 author 标记 author指定一个类的作者 它的语法如下 author description 其中 description通常是编写这个类的作者名字 标记 author只能用在类的文档中 在执行j
  • PCL 改进体素滤波

    一 改进简介 PCL的VoxelGrid类是通过输入的点云数据创建一个三维体素栅格 用每个体素内用体素中所有点的重心来近似显示体素中的其他点 这样该体素内所有点都用一个重心点来最终表示 该重心点不一定就是原始点云中的点 有失原始点云的细小特
  • 用c语言浮点输出时,如何让小数点后没用的0不显示

    动态控制浮点数小数位数 2020年7月29日 存在问题 C语言把浮点数直接通过sprintf函数保存在字符数组中 末尾的0显得很多余 想办法把末尾的0去掉 解决问题 在打印时 通过格式控制输出 一般情况使用 f即可输出浮点数 我们通过 f
  • linux查看3306是哪个进程占用,linux查看端口占用

    发表于 2019 08 18 21 00 36 by 月小升 一 例子 lsof i 7000 COMMAND PID USER FD TYPE DEVICE SIZE OFF NODE NAME frps 1249 root 3u IPv
  • 二叉树代码

    1 普通二叉树的构建 构建结点以及搜索与删除的方法 public class Node private int no private String name private Node left private Node right priv
  • C++ srand()只能调用一次,否则rand()每次返回相同值

    C srand 只能调用一次 否则rand 每次返回相同值 面试的时候写一个洗牌算法 结果遇到这个问题坑死我了 幸运的是面试官也不太看得出来问题出在哪 他主攻Java 所以给了我足够时间去调试 问题描述 自己创作的洗牌算法 include
  • npm的一些常用命令和被墙问题的解决

    npm node package manager 1 npm网站 npmjs com 2 npm命令行工具 安装 node同时也就已经安装了npm 1 查询npm版本号 在cmd中输入npm v或者npm version即可 2 升级npm
  • java select 函数_五种I/O模型和select函数简介

    一 五种I O模型 1 阻塞I O 我们在前面所说的I O模型都是阻塞I O 即调用recv系统调用 如果没有数据则阻塞等待 当数据到来则将数据从内核空间 套接口缓冲区 拷贝到用户空间 recv函数提供的buf 然后recv返回 进行数据处
  • 策略模式(Strategy)

    设计模式之策略模式 策略模式的主要作用是 整体地替换算法 无论什么程序 其目的都是解决问题 而为了解决问题 我们需要编写特定的算法 使用Strategy模式可以整体地替换算法的实现部分 能够整体地替换算法 能让我们轻松地以不同的算法解决同一
  • win10添加环境变量后没用_教你Win10系统配置的环境变量未生效的解决方法

    教你Win10系统配置的环境变量未生效的解决方法 一些Win10小伙伴经常遇到配置了环境变量无法生效的情况 那么Win10系统安装了jdk 修改环境变量配置不生效要如何解决呢 有遇到此类问题的小伙伴就跟着Win10专业版官网小编一起来看看W
  • 协同过滤推荐算法

    Collaborative Filtering Recommendation 转自 http www cnblogs com zhangchaoyang articles 2664366 html 另 一定要看文献 协同过滤推荐算法综述 马
  • gazebo崩溃gazebo-2 process has died exit code 139

    错误信息 gazebo 2 process has died pid 7605 exit code 139 cmd opt ros kinetic lib gazebo ros gzserver e ode Ubuntu 16 04 on
  • JUC常用到的类

    JUC java util concurrent 并发包中包含了许多并发编程中需要用到的类 锁 如ReentratLock ReadWriteLock ReentrantLock重入锁 可以替代synchronized使用 并且有更多强大的
  • 小白,想入门程序员,应该从什么开始学,顺序是什么?

    首先 你需要选择一门自己感兴趣的编程语言 现在常见的编程语言有 1 C C 属于大多数情况下能接触到的相对基础的编程语言了 优势是基本掌握以后面对其他语言均可以 无压力 坏处是学习起来非常的困难 需要系统性的了解非常多知识点 且耗时一般较长
  • 锁(Lock)、内存屏障(Memory barrier)与 缓存一致性( Cache coherence)

    文章目录 前言 Optimization Barrier Memory barrier Cache coherence 总结 参考资料 前言 在应用层 关于锁的使用大家应该都很熟悉了 作用就是为了保护共享变量不被同时操作而导致无法预测的情况
  • 01-----在Ubuntu16.04上搭建git服务器

    一 在Ubuntu16 04上搭建git服务器的步骤 1 下载git apt get install y git 注 上面可能下载失败 更新一下包即可 然后重新下载 apt get update apt get install y git
  • fullCalendar日程表在Vue项目中的应用

    fullCalendar日程表在Vue项目中的应用 fullCalendar相关API 使用fullCalendar插件在项目中实现日程排版 支持天 月日程转换 自定义事件 页面布局 通过按钮切换天与月视图的转换 天视图回显具体的时分排版项
  • 物联网LoRa系列-21:LoRa终端--射频芯片SX1261 SX1262的FSK调制解调器与配置

    目录 1 SX1261 2功能模块 2 调制技术的基本原理 3 FSK调制技术的基本原理 4 SX1261 2的FSK调制器主要的性能参数 5 SX1261 2的FSK调制器主要寄存器设置 1 SX1261 2功能模块 MCU与SX1261
  • Linux I/O(输入和输出)

    1 文件I O 1 文件描述符 对于内核而言 所有打开的文件都通过文件描述符引用 文件描述符通常是一个小的非负整数 内核用它标识一个特定进程正在访问的文件 当内核打开一个已有文件或创建一个新文件时 它返回一个文件描述符 2 按照惯例 UNI