【Linux】基础IO_1


六、基础IO

1. C语言的文件接口

我们知道 文件 = 文件内容 + 文件属性 。即使是一个空文件,仍然会在磁盘中占据空间。那打开文件是什么意思呢?其实文件打开的意思就是:将文件从磁盘中加载到内存中。 文件跟程序一样,被操作系统使用内核数据结构给管理起来了,对文件的操作就转变为对文件的调度。
我们接下来熟悉和使用C语言中的文件接口。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
参数:
在这里插入图片描述

“r”:只读方式打开文件,文件必须存在。
“w”:写入方式打开文件,如果文件存在,则清空文件内容;如果文件不存在,则创建新文件。
“a”:追加方式打开文件,如果文件存在,写入数据时定位到文件末尾;如果文件不存在,则创建新文件。
“rb”:以二进制只读方式打开文件。
“wb”:以二进制写入方式打开文件。
“ab”:以二进制追加方式打开文件。

不知道大家还记得Linux中的重定向符不,>输出重定向,<输入重定向,>>追加重定向。
在这里插入图片描述
重定向符和文件流非常相似,他俩肯定有莫大的关系。既然知道了写操作,我们接下来看看文件读取操作。
在这里插入图片描述
在这里插入图片描述

2. 系统文件I/O

我们从键盘接收输入,打印到显示器上,但键盘和显示器都是硬件资源,他们统统被操作系统所管理,我们的文件(进程)无法绕过操作系统打开这些资源,所以操作系统必须要提供一些接口来支持文件访问。
在这里插入图片描述
我们来用一用:
在这里插入图片描述
在这里插入图片描述
接下来看看怎么写和怎么关闭:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
open系统调用接口传递标志位(本质是宏)时,还有其他的标志位。
在这里插入图片描述
在这里插入图片描述

我们系统调用接口中都需要 fd 这个参数,这个参数是文件标识符,确定文件的参数。在操作系统内部,进程PCB中存储着一个结构体指针,指向一个文件描述符表,这个表是一个结构体指针数组,内部存的是文件结构体指针,分别指向不同的打开的文件。而这个 fd 就是这个文件表结构体的下标,确定文件。
在这里插入图片描述
一般来说,fd = 0 是标准输入文件流(键盘文件),1 是标准输出文件流(显示器文件), 2 是标准错误文件流(显示器文件)。

fd的分配规则:最小的没有被使用的数组下标,会被分配给最新打开的文件。 所以我们可以:close(1),即关闭stdout流,然后新打开的文件的fd就是1,但是输出函数并不知道,向显示器打印的字符串统统转变成向文件内写入。就实现了重定向的功能。
在这里插入图片描述
这里 dup2 函数可以方便实现重定向的功能。


未完待续

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Linux IO 模型是指 Linux 操作系统中的 IO 处理机制。它的目的是解决多个程序同时使用 IO 设备时的资源竞争问题,以及提供一种高效的 IO 处理方式。 Linux IO 模型主要分为三种:阻塞 IO、非阻塞 IOIO 多路复用。 阻塞 IO 指的是当程序进行 IO 操作时,会被挂起直到 IO 操作完成,这种方式简单易用,但是对于高并发环境不太适用。 非阻塞 IO 指的是程序进行 IO 操作时,如果无法立即完成,会立即返回一个错误码,程序可以通过循环不断地进行 IO 操作来实现轮询的效果。非阻塞 IO 可以提高程序的响应速度,但是会增加程序的复杂度。 IO 多路复用指的是程序可以同时监听多个 IO 设备,一旦有 IO 事件发生,就会立即执行相应的操作。IO 多路复用可以提高程序的效率,但是需要程序员手动编写代码来实现。 Linux IO 模型还有其他的实现方式,比如信号驱动 IO 和异步 IO 等。但是这些方式的使用比较复杂,一般不常用。 ### 回答2: Linux中的IO模型是指操作系统在处理输入输出的过程中所遵循的一种方式。它主要包括阻塞IO、非阻塞IO、多路复用IO和异步IO四种模型。 阻塞IO是最简单的IO模型,当一个IO操作发生时,应用程序会被阻塞,直到IO操作完成才能继续执行。这种模型的特点是简单直接,但是当有多个IO操作时会造成线程的阻塞,影响系统的性能。 非阻塞IO是在阻塞IO基础上发展而来的,应用程序在发起一个IO操作后可以继续执行其他任务,不必等待IO操作的完成。但是需要通过轮询来不断地检查IO操作是否完成,效率相对较低。 多路复用IO使用select、poll、epoll等系统调用来监听多个IO事件,当某个IO事件就绪时,应用程序才会进行读写操作,避免了前两种模型的效率问题。多路复用IO模型适用于连接数较多时的场景,如服务器的网络通信。 异步IO是最高效的IO模型,应用程序发起一个IO操作后,立即可以执行其他任务,不需要等待IO操作的完成。当IO操作完成后,操作系统会通知应用程序进行后续处理。异步IO模型常用于高吞吐量、低延迟的应用,如高性能服务器和数据库等。 总之,Linux IO模型提供了多种不同的方式来处理输入输出,每种模型都有其适用的场景和特点。选择合适的IO模型可以提高系统的性能和效率。 ### 回答3: Linux IO模型是指操作系统中用于处理输入输出操作的一种方法或机制。在Linux中,常见的IO模型有阻塞IO、非阻塞IOIO多路复用和异步IO。 阻塞IO是最基本的IO模型,当应用程序发起一个IO请求时,它将一直阻塞等待直到IO操作完成,期间无法做其他任务。虽然简单易用,但是对资源的利用不高。 非阻塞IO在发起一个IO请求后,不会阻塞等待IO操作完成,而是立即返回并继续做其他任务。应用程序需要不断地轮询IO操作状态,直到操作完成。由于需要不断轮询,对CPU的占用较高,但可以提高资源的利用率。 IO多路复用是通过一个线程同时监听多个IO事件,从而实现并发处理多个IO操作。在IO多路复用模型中,应用程序不需要进行轮询,而是通过调用select、poll或epoll等系统调用监听多个文件描述符的IO事件。这样可以在单个线程中处理多个IO操作,提高并发性能。 异步IO模型在发起一个IO请求后,应用程序不需要等待IO操作完成,而是继续做其他任务。当IO操作完成后,操作系统会通知应用程序。异步IO模型需要操作系统的支持,效率较高,但实现较为复杂。 通过选择合适的IO模型,可以根据不同的应用场景来提高IO操作的效率和性能。例如,对于需要同时处理大量连接的服务器应用,IO多路复用是一种常见的选择;而对于需要处理大量IO操作的高性能服务器,则可以考虑使用异步IO模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值