首页
学习
活动
专区
圈层
工具
发布

深入了解linux系统—— 基础IO(下)

我们还知道,0指向的是标准输入、1指向标准输入、2指向标准错误; 那输出重定向的本质是什么呢? 这个就比较简单了,其本质就是将我们新的文件的地址,覆盖式的填充到文件描述符1的位置。...理解一切皆文件 我们知道:Linux下一切皆文件; 在windows中是文件的东西,在Linux下也是文件;一些在windows中不是文件的东西(磁盘,显示器,键盘等)这样的硬件硬件设备在Linux...这样将一切都抽象为文件,都可以看做是文件;我们就只需一套API和开发工具就可以调取Linux中的绝大部分资源。...先描述,后组织 在Linux操作系统内核当中,存在一个struct device,它描述了硬件设备的相关信息;然后将这些硬件设备对应的struct device管理起来即可(将所有的struct device...我们再想一下,我们对应硬件设备的访问,无非就是读和写,也就是I/O,那我们只需知道啊硬件设备如何进行I/O操作不就可硬件设备统一读写操作吗 在我们的struct file中还存在着两个函数指针write

24310

【Linux系统】基础IO(下)

引入系统文件I/O中的标志位传递 在Linux系统文件I/O中,标志位传递采用相同的位操作机制,尤其是open系统调用中。...(不同步元数据),语义同 O_SYNC 在 Linux 的实现 O_DIRECT 直接 I/O(绕过页缓存),需对齐内存地址和块大小 2. read / write – 读写数据 函数原型: #include...现象:标准输出被重定向到文件。 核心问题: 重定向如何通过文件描述符(fd)实现?其本质是什么? 2....I/O 重定向:标准流控制 // 将标准输出重定向到文件 int fd = open("log.txt", O_WRONLY|O_CREAT, 0644); dup2(fd, STDOUT_FILENO...缓冲区是内存中的临时数据存储区,在I/O操作中充当数据中转站,形成三级缓冲体系: 用户态缓冲区: 由标准I/O库(如glibc)维护 类型:全缓冲/行缓冲/无缓冲 位置:进程地址空间 内核页缓存

18410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    文件描述符fd和0 & 1 & 2的含义(stdin..)

    重定向的实质 1和2的区别 在 Linux 系统中,文件描述符(File Descriptor, FD)是一个非负整数,用于标识打开的文件、输入/输出设备或其他资源。...小结 文件描述符 0、1 和 2 用于表示标准输入、标准输出和标准错误,它们在 Linux 等类 Unix 系统中是处理输入输出的基础。通过合理地使用它们,可以方便地进行 I/O 操作和错误处理。...它用于代指被打开的文件,所有通过I/O操作的系统调用都通过文件描述符进行。...重定向允许用户将标准输入、输出或错误重定向到文件或其他设备。 与文件对象的关系: 用户在访问文件时,系统会将文件相关信息从磁盘中加载到内存,并在内核中创建文件对象。...一切皆文件: 在Linux下,一切皆文件,包括硬件设备、网络连接等,都可以通过文件描述符进行访问和操作。

    92610

    基础IO:系统文件IO

    在 Linux 操作系统中,文件 I/O(输入/输出)是程序与文件系统交互的基础。理解文件 I/O 的工作原理对于编写高效、可靠的程序至关重要。本文将深入探讨系统文件 I/O 的机制。...而对于库函数来说,返回值为FILE,作为将fd包装好的结构体,在函数内部使用系统调用的时候会自行进行处理。 FILE FILE是什么呢?...操作系统依赖: 不同的操作系统有不同的API和系统调用。例如,Linux和windows的文件操作、内存管理、线程处理等API不同。...文件描述符在file_struct中的数组中存放管理,通过改变文件描述符的指向,我们可以将输入或输出流重定向到文件、设备或其他流。...,以及如何在 C 语言中实现文件的重定向功能,我们可以更好地理解 Linux 系统文件 I/O 的工作原理。

    72900

    【Linux篇】文件描述符背后的秘密:让你的代码更加高效

    1.3.1 0&1&2 Linux进程会默认打开3个缺省的文件描述符,分别是标准输入0,标准输出1,标准错误2,一般对应的设备是键盘,显示器,显示器。...1.4 重定向(重点) 1.4.1 基本概念 重定向(Redirection)是操作系统中将输入输出流从默认的终端或文件描述符重定向到其他位置的操作。...它通常用于将程序的标准输入、输出或错误输出重定向到文件或其他设备。 常见用法: 标准输出重定向: 假设我们要将程序的输出重定向到文件,而不是打印到终端上。...Linux一切皆文件原理: 该图准确讲述的是在Linux等操作系统中,文件操作是如何通过结构体和函数指针实现的,以及不同设备如何通过不同的文件操作结构体来实现对文件的读写访问。...可以达到屏蔽底层设备的差异。 二. 最后 本文深入介绍了文件描述符的概念及其在操作系统中的应用,特别是在系统文件I/O操作中的重要性。

    50010

    2>&1到底是什么意思

    站在计算机的角度,I/O表示的是计算机与外界的交互,交互的对象是硬件设备,输入输出自然也指的是和硬件之间的输入输出。...I/O设备 站在程序的角度,I/O的含义更宽泛,操作系统与所有能被当作文件的对象之间的交互就是I/O。...输入输出重定向 标准输入/输出/错误在描述表的位置虽然是固定的,但他们指向的数据流是可以改变的。...2>是用来重定向标准错误,因为标准错误在描述符表中的fd就是2,同样,其实重定向标准输出也可以表示为1>,不过一般简写为>。...标准错误和标准输出可以重定向到同一个地方,比如指令中的&1表示的就是标准输出,2>&1的含义就是重定向标准错误到标准输出表示的数据流中。 ---- 完!

    1.9K10

    Linux内核21-Linux内核的中断处理过程

    I/O中断处理 中断资源是有限的,所以对于I/O中断处理程序来说,应该尽量为尽可能多的设备提供服务。比如PCI总线架构,几个设备共享同一个IRQ请求线。这意味中断矢量表是共享的,不能一一覆盖所有设备。...完成分配后,每个中断处理程序通过函数读取访问I/O设备的IRQ中断请求线。比如,遵循PCI总线标准的设备,可以使用一组类似pci_read_config_byte()的函数读取设备的配置空间。...然后在设备驱动初始化的时候才能对应上正确的中断处理程序。 IRQ相关数据结构 那么,IRQ数据结构是什么样子呢?下图展示了IRQ数据结构以及它们之间的关系。...也就是初始化其中断重定向表(24项),然后所有来自I/O设备的IRQ就可以被中继到各个CPU上,分配原则是最低优先级优先原则。...内核线程使用多APIC系统一个很棒的功能,叫做CPU的IRQ亲和力:通过修改I/O-APIC的中断重定向表,将中断信号指定到新的CPU上。

    3.3K20

    【Linux基础IO】深入Linux文件描述符与重定向:解锁高效IO操作的秘密

    系统文件I/O 系统文件I/O,即系统输入输出操作,是计算机系统中负责数据在内存与外部设备(如磁盘、键盘、显示器等)之间传输的机制。...在C语言中,文件I/O操作是一个重要的组成部分,它允许程序读取和写入文件,以及进行其他形式的数据交换 open 在Linux系统编程中,open 是一个非常重要的系统调用(system call)...重定向 在Linux中,重定向是一种将命令的标准输入(stdin)、标准输出(stdout)或标准错误(stderr)重新指向文件或其他命令的技术。...2>,在以后运用中,我们也可以将1重定向到一个文件中,2重定向到另一个文件中,这样在我们需要时,可以更快速的定位 使用 dup2 系统调用 dup2是一个系统调用,用于复制一个现有的文件描述符到另一个文件描述符的位置...这个调用主要用于重定向标准输入、标准输出或标准错误流到文件或其他I/O设备 dup2代码示例: int main() { //int fd = open("log.txt", O_WRONLY

    61610

    【Linux】基础IO

    这 种现象叫做输出重定向。常⻅的重定向有: > , >> , < 那重定向的本质是什么呢?...它使得低速的输⼊输出设备和⾼速的CPU能够协调⼯作,避免低速的输⼊输出设备占⽤CPU,解放出CPU,使其能够⾼效率⼯作。 4.3 缓冲类型 标准I/O提供了3种类型的缓冲区。...⾏缓冲区:在⾏缓冲情况下,当在输⼊和输出中遇到换⾏符时,标准I/O库函数将会执⾏系统调⽤ 操作。当所操作的流涉及⼀个终端时(例如标准输⼊和标准输出),使⽤⾏缓冲⽅式。...因为标准 I/O库每⾏的缓冲区⻓度是固定的,所以只要填满了缓冲区,即使还没有遇到换⾏符,也会执⾏ I/O系统调⽤操作,默认⾏缓冲区的⼤⼩为1024。...⽆缓冲区:⽆缓冲区是指标准I/O库不对字符进⾏缓存,直接调⽤系统调⽤。标准出错流stderr通常是不带缓冲区的,这使得出错信息能够尽快地显⽰出来。

    43910

    【寻找Linux的奥秘】第十章:基础文件IO(上)

    2.2 标准输入输出流 我们先来认识一下什么是流,大家可能一直听过各种流,但流究竟是什么呢?...3.2 文件系统调用 有了上面标志位的介绍,下面让我们来看一看Linux中关于文件操作的系统调用: 3.2.1 open 在 Linux 系统中,open() 是一个用于打开或创建文件或设备的系统调用,...这是 Linux 系统 API 演进的典型例子——保持接口兼容性的同时,底层实现更强大、更安全。从严格的技术角度,现在不应该说 open() 是系统调用,它是库函数。...,支持各种 I/O 对象,包括文件、设备、socket 等,是一切高级 I/O 的基础。...这种现象叫做输出重定向。 那么重定向的本质是什么呢? 因此,重定向的本质实际上就是把对某个文件的操作通过改变文件描述符指向的内容从而改变操作的文件。

    21710

    管道与重定向、文件查找-Linux每日一练(7)

    Unix 系统中,每个进程都有 STDIN 、 STDOUT 和 STDERR 这 3 种标准 I/O 。...所以几乎所有语言都有相应的标准 I/O 函数,比如 printf 、 println 、 scanf 等命令,专门用来接收用户的输入,或者打印输出到屏幕、或者文件里。 ?...在 SHELL 里面重定向相当的方便,只需要用 > 或 >> 符号就可以了。当然我们也可以直接通过命令把 3 种 I/O 区别开,分别输出。 题目一:> 和 >> 有什么区别?...比如有些人可能会这么想:2 是标准错误输入, 1 是标准输出, > 是重定向符号,那么"将标准错误输出重定向到标准输出"是不是就应该写成 2>1 就行了?是这样吗?...你肯定也用到过,只不过不一定理解是什么含义,例如在定时任务脚本结尾加上 >/dev/null 2>&1 ,让所有的输出流(包括错误的和正确的)都定向到空设备丢弃。

    1.5K31

    【读懂Linux】基础IO

    文件描述符fd 通过对 open 函数的学习,我们知道了文件描述符就是一个小整数 0 & 1 & 2 Linux进程默认情况下会有3个缺省打开的文件描述符,分别是标准输入0, 标准输出1,...标准错误2. 0,1,2对应的物理设备一般是:键盘,显示器,显示器 所以输入输出还可以采用如下方式: #include #include #include...这种现象叫做输出重定向。常见的重定向有:>, >>, < 那重定向的本质是什么呢?...内核在 inode 上的磁盘分布区记录了上述块列表。 4. 添加文件名到目录 新的文件名abc 。 linux 如何在当前的目录中记录这个文件?...内核记录了这个连接数,inode263466 的硬连接数为2。 我们在删除文件时干了两件事情:1.在目录中将对应的记录删除,2.将硬连接数-1,如果为0,则将对应的磁盘释放。

    48310

    轻松实现高速串行I_O,有助于理解GTPGTX工作原理

    在早期的并行I/O总线中,接口的数据对齐问题影响着与外部设备的有效通信。并且,随着更高的传输速度在数字设计中日渐普及,对信号延迟的管理也变得困难重重。...因为它代表了数字 I/O 领域最热门的潮流——千兆位级串行通信。 这类信号在市场上引起轩然大波。它被广泛采用,从局域网( LAN)设备到尖端医疗成像设备,再到先进的战斗机技术,不一而足。...那么,他会考虑使用千兆位串行输入/输出(I/O)吗? 千兆位串行I/O的优势 千兆位串行I/O的主要优势是什么?答案是:速度。...不过那只是极端情况,我们来看一个应用实例,它向我们展示了串行I/O的速度是如何帮助系统架构师、电路板设计师和逻辑设计师的。 缺点是什么?...在我们认为千兆位级串行I/O技术出色的近乎不真实之前,来看看它的弊端吧。设计中,首先我 们必须密切注意信号完整性问题。

    1.8K20

    【Linux】从open到write:系统文件IO 的奥秘与实战指南

    在 Linux 和其他类 Unix 系统中,系统文件 I/O 通常通过系统调用(system call)完成。...与 C 标准库的文件 I/O 函数(如 fopen、fread、fwrite)相比,系统文件 I/O 提供了更底层的控制和更高的效率,但操作也稍显复杂。...在 Unix 和类 Unix 系统(如 Linux)中,文件描述符是进程和内核之间进行文件或资源操作的桥梁,几乎所有的 I/O 操作都是通过文件描述符来完成的。...常见的重定向>, >>, < 重定向的本质: 3. write函数 write 函数是 Unix 和 Linux 系统中进行文件写入操作的系统调用,用于将数据从用户空间的缓冲区写入到文件或设备(例如文件...4. read函数 read 是 Unix 和 Linux 系统中的一个系统调用,用于从文件或其他输入资源(如管道、网络套接字等)中读取数据到用户提供的缓冲区中。

    48510

    Python中os与sys两模块的区别 原

    stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象....你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们 我们常用print和raw_input来进行输入和打印,那么print 和 raw_input...而Python程序的在Shell中的I/O重定向与本文开始时举的DOS命令的重定向完全相同,其实这种重定向是由Shell来提供的,与Python 本身并无关系。...那么我们是否可以在Python程序内部将stdin,stdout,stderr读写操作重定向到一个内部对象呢?答案是肯定的。...I/O流 sys.stdout =buff                                #将标准I/O流重定向到buff对象 print 42, 'hello', 0.001

    71410

    【Linux】基础IO>文件系统&&软硬链接&&动静态库详解

    进程默认情况下会有3个缺省打开的文件描述符,分别是标准输入0, 标准输出1, 标准错误2. 0,1,2对应的物理设备一般是:键盘,显示器,显示器 所以输入输出还可以采用如下方式: #include...:在files_struct数组当中,找到当前没有被使用的最小的一个下标,作为新的文件描述符 2.4.3 重定向 那如果关闭1呢?...这种现象叫做输出重定向。常见的重定向有:>, >>, < 那重定向的本质是什么呢?...内核在inode上的磁盘分布区记录了上述块列表 添加文件名到目录 新的文件名abc。linux如何在当前的目录中记录这个文件?内核将入口(263466,abc)添加到目录文件。...在目录中将对应的记录删除,2.将硬连接数-1,如果为0,则将对应的磁盘释放 4.2.1 硬链接的作用 构建Linux的相对路径结构,让我们可以通过. ..来进行路径定位(Linux中,不允许给目录建立硬链接

    37210

    第一章: 微型计算机组成结构

    数据线用于在CPU和内存或I/O设备之间提供数据传输的通道 控制线则负责指挥执行的具体读/写操作 对于使用80386CPU的PC机,其内部地址线和数据线都分别有32根,即都是32位的。...在普通Linux系统下通过查看/proc/ioports 文件可以得到相关控制器或设置使用的I/O地址范围,见如下所示。...中断处理控制方式需要有中断控制器的支持。在这种控制方式下,只有当I/O设备通过中断向CPU提出处理请求时,CPU才会暂时中断当前执行的程序转而去执行相应的I/O中断处理服务过程。...因此采用中断控制方式时需要首先设置好中断向量表,并编制好相应的中断处理服务过程。Linux操作系统中大多数设备I/O控制都采用中断处理方式。...这两个特定范围被用于I/O设备和BIOS程序。假如我们的计算机中有16MB的物理内存,那么在Linux 0.1x系统中,0-640K将被用作存放内核代码和数据。

    2.1K40

    【Linux探索学习】第二十一弹——文件描述符和输出重定向:深入解析Linux操作系统中的文件描述符与输出重定向的底层机制

    1.1 文件描述符的类型 在Linux中,文件描述符被划分为三大类: 标准输入(stdin):文件描述符为0,表示程序的标准输入流,通常指向键盘输入。...除了这三个标准流,Linux允许通过系统调用打开其他文件或设备,从而获得新的文件描述符。这些文件描述符可以通过文件I/O操作进行读写。...这些系统调用接口我们在上一篇做过详细讲解了,这里就不再介绍了 二、输出重定向 输出重定向是将命令的标准输出(stdout)或者标准错误输出(stderr)重定向到文件、设备或其他进程的一个过程。...首先我们先来看基本的重定向,也就是在命令行中可以直接实现的重定向 2.1 基本的重定向 在 Linux 中,我们可以使用 > 或 >> 来将输出重定向到文件。...,这些内容都属于拔高内容了,等我们学到后面用到的时候再讲 四、总结 文件描述符和输出重定向是 Linux 操作系统中两个非常重要的机制,它们在系统 I/O 操作、进程管理和文件系统中扮演着至关重要的角色

    63210

    系统文件IO文件描述符重定向FILE缓冲区的理解

    因此,我们可以使用FILE结构体的字段,将标准输入输出流的文件描述符打印出来,就可以知道了:0,1,2对应的物理设备一般是:键盘(stdin),显示器(stdout),显示器(stderr),也就是0表示标准输入...当子进程重定向后,是不会影响到父进程的,因为进程具有独立性 重定向的本质就是长层的fd不变,在内核中修改fd对于的struct file*的地址。  ...于是,站在struct file上层去看,所有的文件和设备,统一都是struct file,即内核数据结构,这部分也称为虚拟文件(vfs)。 这就是所谓的Linux一切皆文件!...指的是什么缓冲区? 看回上面的代码,我们发现程序执行后,打印出来是4次,但是如果输入到文件中,发现是7次,而且凡是C语言的接口所打印的,都多了1次。那么这里说明了,这种现象一定是跟缓冲区有关!...因为stdout是行刷新,在进程fork()之前,三条C语言函数已经将数据打印到标准输出(显示器外设),此时的FILE内部,或者说是进程内部,已经没有了这些数据了 ②如果我们进行了重定向,是写入文件,而文件是属于磁盘文件

    1.1K30

    python中的sys模块函数

    = ’sys’: …… (6)sys.stdin,sys.stdout,sys.stderr stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象....你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们 从网上摘抄的文章,供大家参考: testing stdout print ‘Hello...而Python程序的在Shell中的I/O重定向与本文开始时举的DOS命令的重定向完全相同,其实这种重定向是由Shell来提供的,与Python 本身并无关系。...那么我们是否可以在Python程序内部将stdin,stdout,stderr读写操作重定向到一个内部对象呢?答案是肯定的。...I/O流 sys.stdout = buff #将标准I/O流重定向到buff对象 print 42, ‘hello’, 0.001 sys.stdout =temp #恢复标准I/O流 print

    1.5K10
    领券