Linux下“基础IO”相关内容整理分析

Linux下C语言 文件IO 标准IO相关命令 继上篇,将指令放到这里啦 阅读详情

1. 复习C文件IO相关操作

#include<stdio.h>    
int main()                                                                                             
{                               
  FILE *fp = fopen("./log.txt","r");      
  if(NULL == fp) {                      
    perror("fopen");                    
    return 1;                           
  }                                     
                        
  char buffer[64];      
  while(fgets(buffer,sizeof(buffer),fp)){      
    printf("%s",buffer);                     
  }                                          
                                             
  if(!feof(fp)) printf("非正常退出!\n");      
  else printf("正常退出!\n");               
                                             
 // FILE *fp = fopen("./log.txt","w");       
 // if(NULL == fp)                           
 // {                                        
 //   perror("fopen");                    
 //   return 1;                           
 // }                                     
 //                                       
 // int cnt = 2;                                
 // while(cnt){                                 
 //   const char *msg = "hello sakeww\n";       
 //   fputs(msg,fp);                            
 //   cnt--;                                    
 // }                                           
 // fclose(fp);                                 
                                                
  return 0;                                     
} 

先运行注释部分,创建记事本
然后运行r,读取文件


c程序会默认打开三个输入输出流,stdin,stdout,stderr
在这里插入图片描述
因为他们三个的类型都是FILE,所以他们三个都是文件

他们对应的是:
stdin:键盘
stdout:显示器
stderr:显示器

测试:
在这里插入图片描述
在这里插入图片描述
stdout和stderr都可以完成上述操作

在这里插入图片描述
(>)输出重定向:本质是吧stdout的内容重定向的到文件中

总结:
fputs向一般文件或者硬盘设备都能写入!
一般文件在:磁盘,也是硬件
即:一切皆文件!!!
最终都是访问硬件:显示器,键盘,文件(磁盘)
OS是硬件的管理者!
所有的语言上的对“文件”的操作,都必须贯穿“OS”
OS不相信任何人,访问操作系统是需要通过系统调用接口的!
几乎所有的语言fopen,fclose,fwrite,fgets,fputs,fgets,fputc,等底层一定需要使用OS提供的系统调用
在这里插入图片描述

2. 文件相关系统调用接口

为什么要学习文件级别的系统调用接口

  1. 距离操作系统更近 ,就可通过学习这些接口,以语言的方式去揣测os的细节
  2. c/c++的文件操作虽然不一样,但是底层的接口是一样的,

在这里插入图片描述
在这里插入图片描述
问题:为什么是从3开始345?
0对应标准输入—键盘
1对应标准输出—显示器
2对应标准错误—显示器

联想:
当看见0123456789…这些小整数时,会联想到:
数组
------>
问题:
所有的文件操作表现上是不是都是进程执行的对应的函数?是
文件操作:进程的文件的操作
要操作文件必须先打开文件
打开文件的本质是:将文件相关的属性信息,加载到内存!
-------->
系统中是不是会存在大量的进程,进程可以打开多个文件吗?是
进程:打开文件 = 1:n
系统中存在可能更多的打开的文件
存在一个文件被多个进程打开
------>
那么操作系统要不要把打开的文件在内存中(系统中)管理起来呢?
必须要管理
-------->
OS如何管理打开的文件呢?
先描述,在组织!!!
---->
struct file{
包含了打开文件的相关属性
链接属性
}

3.认识文件描述符,理解重定向

3.1文件描述符fd

在这里插入图片描述fd:本质是内核中是进程和文件管理的数组的下标
在这里插入图片描述

简略图:(将上述图片进行简化)
在这里插入图片描述

3.1.1证明012也是可以被读写的

在这里插入图片描述
在这里插入图片描述
也可以在2里面写入
即:

write(2,msg,strlen(msg));

在这里插入图片描述
在这里插入图片描述
问题:为什么echo下一行是一个空行?
当我们输入你好的时候,我们按了一个 回车 ,回车是键盘的按键
读取的时候,也把这个回车读取了
在这里插入图片描述

3.2文件描述符的分配规则

在这里插入图片描述
显然这里输出: fd:3

当我们关闭0呢?
在这里插入图片描述
输出: fd:0

如果关闭2
输出: fd:2

基本结论:
文件描述符的基本规则:
给新文件分配的fd,是从fd_array中找一个最小的,没有被使用的,作为新的fd!

如果关闭0和2
那么就会输出: fd:0

3.3重定向

3.3.1重定向

当关闭1 时:
在这里插入图片描述
在这里插入图片描述
本来应该显示到显示器中,但是却被显示到文件内部–输出重定向

原因解释:
这个代码被编译运行之后,就会变成进程 ,在内核中就会产生task_struct
最终默认会打开012 这样的文件(struct file)
task_struct为了能指向这些文件,内部包含了一个指针,指向了一个结构(files_struct)
在这里插入图片描述

追加重定向
在这里插入图片描述
在这里插入图片描述

输入重定向
在这里插入图片描述

在这里插入图片描述

打印stdin,stdout,stderr
在这里插入图片描述
在这里插入图片描述

3.3.2 重定向的另一种办法 dup2

问题:
是不是必须要关闭1 然后打开文件,才能重定向?不是
有一个系统调用,可以很方便的帮助我们完成重定向–>dup / dup2

在这里插入图片描述

dup2()使newfd成为oldfd的副本,必要时先关闭newfd,但请注意以下几点:
*如果oldfd不是有效的文件描述符,则调用失败,newfd未关闭。
*如果oldfd是有效的文件描述符,并且newfd与oldfd具有相同的值,则dup2()不执行任何操作,并返回newfd。

在这里插入图片描述
在这里插入图片描述
发现没有清空原本文件的内容,而是直接覆盖
int fd = open(“./log.txt”,O_WRONLY|O_TRUNC);

延伸问题:

  1. 执行exec*程序替换的时候,会不会影响我们曾经打开的所有文件?不会
  2. 子进程会共享文件描述符吗?不会
    父进程如果曾经打开了标准输入,标准输出,标准错误,子进程也会继承下去
    为什么我们的所有进程,都会默认打开标准输入,标准输出,标准错误?
    我们命令行所有的进程他的父进程都是bash
    bash命令行解释器,需要打开标准输入,让你输入,标准输出,给你显示,标准错误,当你输入错误给你错误信息

延伸:
引用计数
struct file里面就包含了一个 cnt
cnt表示:有多少个进程指向我
指向就++,close就–
只有cnt==0 才会被释放

问题:
在这里插入图片描述因为你的重定向是输出重定向,只是把本来应该显示到1号文件描述符的内容直接显示到指定位置2号没变,二号照样指向标准错误,两个文件描述符,你重定向只能重定向一个,最终我们重定向的是标准输出,只有标准输出才能打印到文件当中,而标准错误照样会显示到显示器。问题:如何将标准输出和标准错误都进行重定向?在这里插入图片描述

4.文件缓冲区

4.1引入:

问题:
我们在上面测试代码的时候,都是打开文件,很多时候都是没有关闭文件
在这里插入图片描述
进程退出的时候,会刷新FILE内部的数据到OS缓冲区

用户->OS:
刷新策略:

  1. 立即刷新(不缓冲)
  2. 行刷新(行缓冲\n),例如:显示器打印
  3. 缓冲区满了,才刷新(全缓冲)例如:往磁盘文件中写入
  4. 123从OS->硬件也是同样适用的

默认情况下:
printf,fprintf是默认将数据拷贝到c语言拷贝区
当我们遇见\n时,如果是往显示器,那么会消息直接显示到“文件的内核缓冲区”
但是如果我们发生重定向
显示器->log.txt
行缓冲->全缓冲

答:这些数据通过printf,fprintf写到用户缓冲区,stdout指向的缓冲区中,里面包含的数据没有立即刷新到系统层面上,关闭文件时,就不可能刷新到log.txt中,所以不会显示

write是系统调用,写入的内容不会再c缓冲区停留,而是直接再文件的内核缓冲区

在这里插入图片描述

问题:
在这里插入图片描述
系统接口,不受影响,重复出现的是使用c接口
printf,fprintf,fputs的内容都在c缓冲区,fork之后函数退出的时候会刷新文件内核缓冲区
从而主函数,fork函数都会刷新
当在fork上面加入fflush(stdout)就会直输出一遍内容,

5. 理解文件系统中inode的概念

引入:
文件=文件内容+文件属性
如果一个文件没有被打开?这个文件在磁盘上

磁盘是一个什么设备?
磁盘是我们计算机中的一个机械设备(例外:SSD。FLASH卡,usb)

问题:目录是文件吗?是,目录也有inode
目录有数据吗?有
目录的数据块里面有什么?
目前创建的所有文件,全部都在一个特定的目录下!
文件名:inode编号!

在这里插入图片描述

6. 认识软硬链接,对比区别

软连接:
在这里插入图片描述
软连接是有自己独立inode的!软连接是一个独立文件!有自己的inode属性,也有自己的数据块(保存的是指向文件所在路径+文件名)

硬链接:
在这里插入图片描述
硬链接本质上根本就不是一个独立的文件,而是一个文件名和inode编号的映射关系,因为自己没有独立的inode!
因为没有独立的inode,所以没有独立的属性和数据

创建硬链接做了什么?
创建硬链接本质是在特定的目录下,填写一对文件名和inode的映射关系,(完成了重命名)

在这里插入图片描述

acm文件的三个时间:
Access 最后访问时间
Modify 文件内容最后修改时间
Change 属性最后修改时间

补充:
Access:在较新的Linux内核中,Access时间不会被立即刷新,而是有一定的时间间隔,OS才会自动进行更新时间
makefile与gcc会根据时间问题,来判定源文件和可执行程序谁更新,从而指导系统那些文件需要被重新编译!

7. 认识动态静态库,学会结合gcc选项,制作动静态库

查看文件调用了那些库?
在这里插入图片描述
Linux中,一般库分为两种:动态库和静态库
在Linux中,
如果是动态库:库文件是以.so作为后缀的!
如果是静态库:库文件是以.a 作为后缀的!
库文件的命名:lib开头加名字+.so/.a
库的真实名字:去掉lib前缀,去掉后缀,剩下的就是库名称

一般服务器,可能没有内置语言的静态库,而只有动态库

库本身 就是2进制文件,我们如何得知,一个库给我们提供了哪些方法?

一套完整的库:

  1. 库文件本身
  2. 头文件.h (文本的,会说明库中暴露出来的方法的基本使用!)
  3. 说明文档

我们在C/C++中,为什么有时候写代码的时候,有时候是.h里面放上声明,.c/.cpp放入实现?
为什么要这样设计?
因为我们要制作库! 方便使用,私密

在这里插入图片描述

制作静态库

下图部分解释:
%是一个通配符
作用:将当前目录下所有的.o结尾的文件进行展开

程序在翻译的时候会经过:预处理,编译, 汇编之后形成.o ,然后链接
.o叫做目标文件在这里插入图片描述

我们之前写的代码,也用了库,为什么就没有指名这些选项呢?
之前的库,在系统的默认路径下:/lib64,/usr/lib,/usr/include
编译器是能识别这些路径的

如果我不想带这些选项,我们是可以把对应的库和头文件拷贝到默认路径下
但是严重不推荐!
上面的过程也就是一般软件的安装过程

制作动态库

在这里插入图片描述

延伸:
我们其实一直都在直接或者简介使用者第三方库(C/C++)
如何使用呢?
拿别人的库和头文件,加入到自己的项目中
如何制作呢?所有的源代码(.c/.cpp)都需要先被编译成为.o(可重定向目标文件)

  1. 可以先把自己的所有的源文件,全部编译成为.o
  2. 制作动静态库的本质:就是将所有的.o打包,使用ar或者gcc来进行打包
  3. 交付:include+.a 或者 .so 文件

如果你提供静态库,我们只能将我们的库,静态链接到我们的程序中
如果你只提供动态库,我们只能将我们的库,采用动态链接 -static
如果你此时只有动态库,你是无法-static静态链接的!
一般只需要提供两种版本的库文件!

如果我既有动态库又有静态库,优先链接哪一个呢?
一定是优先动态!

【Linux】常用整理 ls /(顯示当前文件夹和系统文件夹)/bin:(Binaries二进制文件),存放最经常使用的命令/boot:存放启动Linux使用的核心文件(链接文件、镜像文件)/dev:(Device),存放Linux的外部设备/etc:(Etcetera等等),存放所有系统管理需要的配置文件和子目录/home:用户主目录/lib:存放系统最基本的动态连接共享库,基本所有应用程序都要用到这些共享库/media:Linux把识别的设备(U盘、光驱)挂载到此目录下/root:系统管理员用户主目录。 阅读详情

相关推荐

如何在win11中用双硬盘或移动硬盘装Ubuntu 20.04 双系统

win11 安装双系统

qq_42817360的博客 5142

linux网络编程IO模型

同步与异步: 同步就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成。 异步是不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了,异步一般使用状态、通知和回调。 阻塞与非阻塞 阻塞是指调用结果返回之前,当前线程会被挂起,一直处...

weixin_34378045的博客 136

zynq-7000学习笔记(八)——USB摄像头图像采集

PC平台:WINDOWS 10 64位 Xilinx设计开发套件:Xilinx_vivado_sdk_2015.4 开发板:Zed Board USB摄像头:罗技 C270(720P) linux源码:2016_R1 一、配置linux,支持UVC       如果是中星微的ZC3XX系列的芯片,则要进到GSPCA把ZC3XX的驱动选上

luotong86的专栏 1万+

Linux之高级IO相关内容整理分析

linux高阶IO

sakeww的博客 377

迈创Cameralink采集卡与MIL软件集成开发实战指南

本文详细介绍了迈创Cameralink采集卡与MIL软件的集成开发实战指南,涵盖硬件安装、驱动配置、MIL软件深度设置及图像采集处理等关键步骤。特别适合工业视觉检测和医疗影像领域,通过优化配置和性能调优,实现高速稳定的图像处理。

weixin_29204205的博客 423

VM与欧姆龙PLC通讯设置:Fins TCP/UDP协议实战避坑指南

本文详细解析了VM视觉平台与欧姆龙PLC通过Fins TCP/UDP协议进行通讯的实战配置与避坑要点。文章对比了Fins TCP与Fins UDP的差异,推荐在多数工业控制场景下优先选用Fins TCP以保证可靠性,并深入讲解了网络设置、寄存器地址映射、轮询优化等核心配置步骤。同时,针对常见的多次触发拍照、数据解析错误等问题提供了具体的解决方案和调试技巧,旨在帮助工程师快速建立稳定高效的通讯连接。

e4f5g6h7的博客 596

Linux基础IO知识点

本文系统性地介绍了Linux文件系统的核心概念与操作机制。首先从狭义和广义角度阐释文件的定义,指出Linux将一切设备抽象为文件("一切皆文件"理念)。然后详细解析文件操作的本质是进程通过系统调用对文件属性和内容的操作,并对比了C语言文件接口与系统级I/O的差异。重点剖析了文件描述符(fd)的工作原理、分配规则及重定向机制,通过struct file结构体揭示操作系统管理文件的底层逻辑。希望本篇文章对大家有所帮助!

2402_84433929的博客 1551

UE4/5编译报错MSB3073终极解决指南:从路径检查到MSVC版本降级

本文针对UE4/5开发中常见的MSB3073编译报错,提供了一套从根源到实战的终极解决指南。文章系统性地讲解了错误成因,并分层次指导排查路径字符、环境变量、MSVC版本兼容性、权限冲突等核心问题,重点介绍了通过降级MSVC编译器版本等关键操作来彻底解决此编译难题。

rl6adventurer的博客 1438

Linux下“进程信号”相关内容整理分析

目录1. 掌握Linux信号的基本概念2. 掌握信号产生的一般方式3. 理解信号递达和阻塞的概念,原理。4. 掌握信号捕捉的一般方式。5. 重新了解可重入函数的概念。6. 了解竞态条件的情景和处理方式7. 了解SIGCHLD信号, 重新编写信号处理函数的一般处理机制 1. 掌握Linux信号的基本概念 2. 掌握信号产生的一般方式 3. 理解信号递达和阻塞的概念,原理。 4. 掌握信号捕捉的一般方式。 5. 重新了解可重入函数的概念。 6. 了解竞态条件的情景和处理方式 7. 了解SIGCHLD信号,

sakeww的博客 274

ROS2 Nav2 - 模型预测路径积分控制器(MPPI)

这是一个预测控制器(局部轨迹规划器),用于实现模型预测路径积分(MPPI)算法,以跟踪具有自适应避障功能的路径。它包含基于插件的 critic 函数,可影响算法的行为。它由 Aleksei Budyakov 创建,由 Steve Macenski 为 Nav2 进行改编和开发。该插件实现了 nav2_core::Controller(控制器)接口,可在整个导航堆栈中作为控制器服务器的动作服务器(controller_server)中的局部轨迹规划器使用。据测定,该控制器可在中等英特尔处理器(第四代 i5)上

机器人控制与仿真应用 3913

基于Dijkstra算法的共享单车调度优化系统设计与实现

根据最新统计数据,全球共享单车市场规模已超过300亿美元,中国作为最大的共享单车市场,日订单量超过5000万次。Dijkstra算法由荷兰计算机科学家Edsger W. Dijkstra于1956年提出,用于解决带权有向图中的单源最短路径问题。本文详细介绍了基于Dijkstra算法的共享单车调度优化系统的设计与实现。本文将详细介绍基于Dijkstra算法的共享单车调度优化系统的设计与实现,采用Java 17、Spring Boot 3.x等最新技术栈。

2201_76125393的博客 621

Linux中IO监控命令的使用分析

一篇不错的有关linux io监控命令的介绍和使用。 1、系统级IO监控 iostat iostat -xdm 1    # 个人习惯 %util         代表磁盘繁忙程度。100% 表示磁盘繁忙, 0%表示磁盘空闲。但是注意,磁盘繁忙不代表磁盘(带宽)利用率高 argrq-sz    提交给驱动层的IO请求大小,一般不小于4K,不大于max(readahead_kb, max_

dxm2025的专栏 895

【思考模型框架】MECE原则,确保分析时,考虑到的所有因素,既不重叠又无遗漏

MECE原则,是Mutually Exclusive and Collectively Exhaustive的缩写,中文译为“相互独立、完全穷尽”。MECE原则,这是一种逻辑思维和组织信息的方法,旨在确保分析时既没有遗漏也没有重复。MECE原则,相互独立、完全穷尽(Mutually Exclusive,Collectively Exhaustive)的原则MECE原则,确保分析时考虑到的所有因素既不重叠又无遗漏。

奶爸的编程之路,也就一周冷个三天 2756

IO写流程分析

IO写流程分析 IO 写流程图示: 系统调用 read系统调用的处理分为用户空间和内核空间处理两部分。其中,用户空间处理只是通过0x80中断陷入内核,接着调用其中断服务例程,即sys_read以进入内核处理流程。 对于read系统调用在内核的处理,如上图所述,经过了VFS、具体文件系统,如ext2、页高速缓冲存层、通用块层、IO调度层、设备驱动层、和设备层。其中,VFS主要是用来屏蔽下层具体文件系...

star的博客 1273

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

linux的每次IO大小控制,Linux IO磁盘篇整理小记

起源本篇起源于对Kafka的一个问题排查,大体的缘由是达到磁盘性能瓶颈。在追踪问题的时候用到iostat -x这命令,详细示例以下:ios 能够看到%idle(%idle小于70%说明IO压力已经比较大了)和%util的值都处于非正常状态。不过这里并不讲述Kafka的问题排查过程,反而是来说述下IO指标的一些知识。每次遇到须要查看磁盘相关信息的时候,一些指标都会或多或少的遗忘,还要翻阅各类资料了解...

weixin_39722946的博客 1248

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Linux下的IO监控与分析

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33895475的博客 118

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

linux驱动最新面试题(面试题整理,含答案)

linux驱动面试题2018(面试题整理,含答案) 版权声明:本文为博主原创文章,未经博主允许不得转载。 转载请标明原址:https://blog.youkuaiyun.com/kai_zone/article/details/82021233 前言: 这篇文章主要是对linux驱动面试题一个整理跟总结,参考了很多网上的资料,基本涵盖linux驱动相关面试内容。我把他们大概的分为三部...

不忘初心 5万+

centos io 查看程序_Centos下的IO监控与分析

近期要在公司内部做个Linux IO方面的培训, 整理下手头的资料给大家分享下各种IO监视工具在Linux IO 体系结构中的位置源自 Linux Performance and Tuning Guidelines.pdf1 系统级IO监控iostatiostat -xdm 1 # 个人习惯%util 代表磁盘繁忙程度。100% 表示磁盘繁忙, 0%表示磁盘空闲。但是注意,磁...

weixin_39816141的博客 487

linux文件IO简述和内容整理

每天需要给自己 定出明确的目标,否则将很难完成任务,自己需要逼自己一把。 人需要目标,就跟船需要灯塔一样,灯塔不会照亮你所有的路,但是起码证明,你所到达的地方是光明的。曾经感觉自己已经是一条破船了,但是现在看来可能自认为是破船,但是修补和装饰下还是一艘新的船,依旧能够从现在 启航,迎接人生未来的挑战。 - 2021.11.25 正文: Linux中的一个基本哲学是一切皆文件,包括普通文件,字符设备,块设备,套接字都是文件,对于这些文件的基本 操作,就是文件打开,文件读写,文件关闭。 普通文件, 设

LCY133的博客 749

linux系统下io的过程,Linux系统基础知识:IO调度

Linux系统基础知识:IO调度IO调度发生在Linux内核的IO调度层。这个层次是针对Linux的整体IO层次体系来说的。从read()或者write()系统调用的角度来说,Linux整体IO体系可以分为七层,它们分别是:VFS层:虚拟文件系统层。由于内核要跟多种文件系统打交道,而每一种文件系统所实现的数据结构和相关方法都可能不尽相同,所以,内核抽象了这一层,专门用来适配各种文件系统,并对外提供...

weixin_35241774的博客 460

超全整理!Linux 性能分析工具汇总

点击下方“民工哥技术之路”,选择“设为星标”回复“1024”获取独家整理的学习资料!出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章。本文也可以作为检验基础知识...

民工哥的博客 1054

Linux 性能分析工具汇总(非常详细)零基础入门到精通,收藏这一篇就够了

出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章。本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识,网络知识和操作系统知识,文档中的工具,是不可能完全掌握的,另外对系统性能分析和优化是一个长期的系列。

Javachichi的博客 1212

Linux运维中的IO瓶颈排查与优化实践

IO瓶颈是Linux运维中常见的性能问题,通过使用iostatvmstatiotop等工具可以快速定位IO瓶颈的根源。优化策略包括升级硬件、调整文件系统、优化应用程序和调整系统参数等。在实际运维中,我们需要结合具体场景灵活运用这些工具和方法,以确保系统的高性能和稳定性。

sinat_39278223的博客 1141

Linux服务器开发监控之 IO

简介 可以通过如下命令查看与 IO 相关的系统信息。 tune2fs -l /dev/sda7 ← 读取superblock信息 # blockdev --getbsz /dev/sda7 ← 获取block大小 tune2fs -l /dev/sda7 | grep "Block size" ← 同上 # dumpe2fs /dev/sda7 | grep "Block size" ← 同上 # stat /boot/ | grep "IO Block" ← 同上 # fdisk -l ← 硬盘的扇区大

资料qun832218493 3717

【Linux系统】文件与基础IO

本篇博客整理了文件与文件系统、文件与IO的相关知识,借由库函数、系统调用、硬件之间的交互、操作系统管理文件的手段等,旨在让读者更深刻地理解“Linux下一切皆文件”。

NeeEk0的博客 1288

Linux IO磁盘篇整理小记

起源 本篇起源于对Kafka的一个问题排查,大致的原因是达到磁盘性能瓶颈。在追踪问题的时候用到iostat -x这命令,详细示例如下: 可以看到%idle(%idle小于70%说明IO压力已经比较大了)和%util的值都处于非正常状态。不过这里并不讲述Kafka的问题排查过程,反而是来讲述下IO指标的一些知识。每次遇到需要查看磁盘相关信息的时候,一些指标都会或多或少的遗忘,还要翻阅各种资料

朱小厮的博客 4185
上一篇: leetcode.1305. 两棵二叉搜索树中的所有元素C++
下一篇: leetcode 713. 乘积小于 K 的子数组C++
sakeww
博客等级 码龄7年 521粉丝 241原创
评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值