【Linux】基础IO_1

简介: 【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 函数可以方便实现重定向的功能。


未完待续

目录
相关文章
|
27天前
|
网络协议 安全 Linux
Linux C/C++之IO多路复用(select)
这篇文章主要介绍了TCP的三次握手和四次挥手过程,TCP与UDP的区别,以及如何使用select函数实现IO多路复用,包括服务器监听多个客户端连接和简单聊天室场景的应用示例。
86 0
|
27天前
|
存储 Linux C语言
Linux C/C++之IO多路复用(aio)
这篇文章介绍了Linux中IO多路复用技术epoll和异步IO技术aio的区别、执行过程、编程模型以及具体的编程实现方式。
66 1
Linux C/C++之IO多路复用(aio)
|
3月前
|
缓存 安全 Linux
Linux 五种IO模型
Linux 五种IO模型
|
27天前
|
Linux C++
Linux C/C++之IO多路复用(poll,epoll)
这篇文章详细介绍了Linux下C/C++编程中IO多路复用的两种机制:poll和epoll,包括它们的比较、编程模型、函数原型以及如何使用这些机制实现服务器端和客户端之间的多个连接。
20 0
Linux C/C++之IO多路复用(poll,epoll)
|
3月前
|
小程序 Linux 开发者
Linux之缓冲区与C库IO函数简单模拟
通过上述编程实例,可以对Linux系统中缓冲区和C库IO函数如何提高文件读写效率有了一个基本的了解。开发者需要根据应用程序的具体需求来选择合适的IO策略。
29 0
|
3月前
|
存储 IDE Linux
Linux源码阅读笔记14-IO体系结构与访问设备
Linux源码阅读笔记14-IO体系结构与访问设备
|
4月前
|
Linux 数据处理 C语言
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(下)
【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向(下)
72 0
|
4月前
|
Linux 编译器 C语言
【Linux】基础IO----理解缓冲区
【Linux】基础IO----理解缓冲区
60 0
【Linux】基础IO----理解缓冲区
|
4月前
|
缓存 网络协议 算法
【Linux系统编程】深入剖析:四大IO模型机制与应用(阻塞、非阻塞、多路复用、信号驱动IO 全解读)
在Linux环境下,主要存在四种IO模型,它们分别是阻塞IO(Blocking IO)、非阻塞IO(Non-blocking IO)、IO多路复用(I/O Multiplexing)和异步IO(Asynchronous IO)。下面我将逐一介绍这些模型的定义:
179 1
|
5月前
|
Linux 编译器 C语言
【Linux】基础IO_4
【Linux】基础IO_4
26 3