Linux-基础IO

本文深入探讨了Linux系统中的文件I/O操作,包括基础的文件描述符、标准输入输出(stdin, stdout, stderr)、系统调用如open、write、read等。讲解了文件描述符的分配规则,重定向,以及dup2系统调用的作用。同时,介绍了文件系统、inode、磁盘分区、软硬链接的概念。此外,还讨论了文件的访问时间、修改时间和状态改变时间(ACM)以及静态库与动态库的生成和使用。
摘要由CSDN通过智能技术生成


文件的宏观理解:

狭义理解:

  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 : 若文件不存在
评论 64
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值