首页 > 系统相关 >Linux下的IO

Linux下的IO

时间:2023-04-09 19:47:34浏览次数:33  
标签:文件 IO 阻塞 描述符 设置 Linux 函数

阻塞IO和非阻塞IO

  • IO 本质是基于操作系统接口来控制底层的硬件之间数据传输,并且在操作系统中实现了多种不同的IO的方式(模型)
  • IO 模型描述的是不同的 IO 方式,比较常用的几种
    • 阻塞型 IO 模型9
    • 非阻塞型 IO 模型
    • 多路复用 IO 模型
  • 阻塞型 IO
    • 当进程发出 IO 请求后,阻塞进程(让进程进入睡眠状态),资源就绪后唤醒进程继续执行
    • 一般默认的 IO 操作都是阻塞型 IO
  • 特点
    • 会一直等待,直到数据就绪

非阻塞型 IO

  • 当进程发出 IO 请求后,无论资源是否就绪都会立即返回,相应的模型如下:
  • 实现非阻塞 IO,需要设置 O_NONBLOCK 标志,设置有两种方式
    • 可以通过调用 fcntl 函数来进行设置
    • 通过 open 函数来进行设置,一般在打开文件时就需要设置
  • fcntl 函数
    • 函数头文件
      • #include <unistd.h>
      • #include <fcntl.h>
    • 函数原型
      • int fcntl(int fd, int cmd, ... /* arg */ );
    • 函数功能
      • 通过命令字(cmd)来设置文件描述符
    • 函数参数
      • fd : 文件描述符
      • cmd : 控制命令字
        • F_GETFD: 获取文件描述符标志
        • F_SETFD: 设置文件描述符标志
        • F_GETFL: 获取文件状态标志
        • F_SETFL : 设置文件状态标志

标签:文件,IO,阻塞,描述符,设置,Linux,函数
From: https://www.cnblogs.com/shubin/p/17300874.html

相关文章

  • 内存去哪儿了——linux free 命令查看内存偏小
        相信很多公司都在使用云服务器,不知道大家有没有注意到,当你购买了一台云服务器以后,在操作系统里面通过free命令查看服务器的内存,容量总是会小于在云厂商控制台上面看到的内存容量。    为什么会这样呢,那就带着疑问往下看。现象描述购买了2台云服务,控制台上面显示......
  • Android LiveData Transformations怎么使用
    AndroidLiveDataTransformations是LiveData库中的一个类,它提供了一些便捷的方法来转换LiveData的数据。使用LiveDataTransformations需要在项目的build.gradle文件中添加以下依赖项: implementation'androidx.lifecycle:lifecycle-extensions:2.2.0'接下来可以在Vi......
  • Linux安装Redis
    1.下载下载地址:https://redis.io/download  本人选择的是5.0.14版本  上传服务器。本人上传至usr/local目录下。2.解压  将解压后的redis-5.0.14文件夹改名为redis3.编译cd到/usr/local/redis目录,输入命令make执行编译命令,接下来控制台会输出各种编译过程中输......
  • 内存去哪儿了——linux free 命令查看内存偏小
        相信很多公司都在使用云服务器,不知道大家有没有注意到,当你购买了一台云服务器以后,在操作系统里面通过free命令查看服务器的内存,容量总是会小于在云厂商控制台上面看到的内存容量。    为什么会这样呢,那就带着疑问往下看。现象描述购买了2台云服务,控制台上面显......
  • Linux系统目录与路径介绍
    HOME目录和工作目录ls命令的作用:以平埔的形式,展示当前工作目录(默认HOME目录)下的内容(文件或文件夹)Linux系统的命令行终端,在启动的时候,默认会加载当前登录用户的HOME目录作为当前工作目录,所以ls命令列出的是HOME目录的内容。HOME目录:每个Linux操作用户在Linux系统的个人账户目......
  • 如何在Linux环境下配置C/C++环境
    root权限后,使用yum源安装yum-yinstallgccgcc-c++kernel-devel//安装gcc、c++编译器以及内核文件查看GCC版本,看是否安装成功gcc-v出现这个就是安装成功了编译&运行C文件为:gcc-o文件名(无后缀)文件名(有后缀)并回车gcc-otesttest.cC++文件为:g++-o文......
  • Linux文件与文件夹操作
    创建文件夹/文件mkdir通过mkdir命令可以创建新的目录(文件夹)。语法:mkdir[-p][Linux路径]参数必填,表示Linux路径,即要创建的文件夹的路径,相对或绝对路径即可。-p选项可选,表示自动创建不存在的父目录,适用于创建连续多层级的目录。如果想要一次性创建多个层级的目录,会报错,因......
  • #yyds干货盘点#Linux中root与sudo的用法与区别(学习笔记)
    Linux下面有两个概念可能大家接触的比较多,一个是sudo命令,还有一个是root账户。Sudo 命令可以以最高权限执行命令,而root账户下所有命令都有最高权限,也就是相当于所有命令都默认加了sudo。那么 sudo和root的区别到底是什么呢,为什么我们建议使用sudo而不是直接使用roo......
  • 【linux】新机配置
    开启网络cd/etc/sysconfig/network-scripts/viifcfg-ens33 ... BOOTPROTO=dhcp ... ONBOOT=yessystemctlrestartnetwork安装网络查看工具yumsearchifconfigyuminstallnet-tools.x86_64开启sshyuminstallopenssh-servervim/etc/ssh/sshd_config ... Po......
  • 【Spring专题】「技术原理」从源码角度去深入分析关于Spring的异常处理ExceptionHandl
    ExceptionHandler的作用ExceptionHandler是Spring框架提供的一个注解,用于处理应用程序中的异常。当应用程序中发生异常时,ExceptionHandler将优先地拦截异常并处理它,然后将处理结果返回到前端。该注解可用于类级别和方法级别,以捕获不同级别的异常。在Spring中使用ExceptionHandler非......