Linux 基础—— IO 全面介绍

本文深入探讨了Linux操作系统中的基础IO,包括文件IO操作、标准输入输出和错误、文件描述符的分配规则,以及系统调用如open、write、read等。此外,还介绍了Linux文件系统的基本概念,如磁盘、inode和文件系统结构,以及动态库与静态库的生成和使用。通过对这些核心概念的讲解,帮助读者全面理解Linux中的IO操作和文件系统管理。
摘要由CSDN通过智能技术生成

Linux - 基础 IO

  • Linux - 基础 IO

  • 文件 IO 相关操作

  • stdin & stdout & stderr

  • 系统文件 I/O

文件的宏观理解:

狭义理解:

  • 1.文件在磁盘里

  • 2.磁盘是永久性存储介质,因此文件在磁盘上的存储是永久性的

  • 3.磁盘是外设(即是输出设备也是输入设备)

  • 4.磁盘上的文件 本质是对文件的所有操作,都是对外设的输入和输出 简称 IO

广义理解:

  • 1.Linux 下一切皆文件(键盘、显示器、网卡、磁盘…… 这些都是抽象化的过程)

文件操作的归类认知:

  • 1.对于 0KB 的空文件是占用磁盘空间的

  • 2.文件是文件属性(元数据)和文件内容的集合(文件 = 属性(元数据)+ 内容)

  • 3.所有的文件操作本质是文件内容操作和文件属性操作

系统角度:

  • 1.对文件的操作本质是进程对文件的操作

  • 2.磁盘的管理者是操作系统

  • 3.文件的读写本质不是通过 C 语言 / C++ 的库函数来操作的(这些库函数只是为用户提供方便),而是通过文件相关的系统调用接口来实现的

文件 IO 相关操作

int fputs(const char *s, FILE *stream);

fputs 函数是将 s 所指向的数据往 stream 中所指向的文件中写

char * fgets ( char * str, int num, FILE * stream )

注:

  • 从流中读取字符并将它们作为 C 字符串存储到 str 中,直到读取 (num-1) 个字符到达换行符或文件结尾以先发生者为准

  • 换行符使 fgets 停止读取但它被函数视为有效字符并包含在复制到 str 的字符串中。

  • 在复制到 str 的字符之后会自动附加一个终止空字符

  • fgets 与 get 完全不同:fgets 不仅接受流参数,还允许指定 str 的最大大小并在字符串中包含任何结束的换行符。

     fwrite 的使用方法

  • 当前路径指的是每个进程,都有一个内置的属性 cwd

  • fwrite 函数如果 size_t count 传入的数正好将字符串内容全部传入到指定文本中则返回 count,否则返回与 count 不同的数

  • fwrite 函数传入内容的大小正好是 size_t size, 和 size_t count 的乘积

stdin & stdout & stderr

 

  • 任何 C 程序,都默认打开三个文件分别叫做标准输入(stdin)、标准输出(stdout)、标准错误(stderr)

  • 标准输入(stdin)——键盘文件——读方法(read)

  • 标准输出(stdout)、标准错误(stderr)——显示器文件——写方法(write)

  • Linux 下一切皆文件

  • 所有的外设硬件,本质是对应的核心操作无外乎是 read 和 write(不同的硬件对应的读写方式是不一样的)

 

  •  注:

  • 可以通过 C 接口,直接对 stdin、stdout、stderr 进行读写

  • C 默认会打开三个输入输出流,分别是 stdin, stdout, stderr, 这样做便于语言进行上手使用,都有输入输出的需求

  • 几乎所有的编程语言都会默认会打开三个输入输出流 stdin, stdout, stderr,

  • 任何一种编程语言的文件操作相关的函数(库函数)底层都会调用系统调用接口(open、close、write、read,这些在 Linux 系统下有,但这些接口不具备可移植性)

  • 语言上相关文件操作的库函数兼容自身语法特征,系统调用使用成本较高,而且不具备可移植性

    系统文件 I/O

    open

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

pathname: 要打开或创建的目标文件
flags: 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。
参数:
   O_RDONLY: 只读打开
   O_WRONLY: 只写打开
   O_RDWR : 读,写打开
     这三个常量,必须指定一个且只能指定一个
   O_CREAT : 若文件不存在,则创建它。需要使用mode选项ÿ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值