1. 文件系统:用来存储、组织、管理文件的一套方式、协议

2. 文件

  • 文件的属性:i-node唯一表示一个文件的存在与否
  • 文件的内容

3. Linux系统如何实现文件的操作?

点击查看代码
硬件层:
inode(属性)--->文件的内容 Linux内核:
struct inode{}用来描述一个文件的屋里inode的信息【链表保存】,系统识别到一个文件的存在,
就会为它创建一个struct inode,一个文件只会唯一对应一个struct inode struct file{}用来描述一个已经打开的文件:
文件状态标记(如:O_RDONLY、O_WRONLY......)
文件的偏移量/offset(类似“光标”) struct inode*
每一个打开的文件都会对应一个struct file
一个文件可以被多个不同的进程打开,一个进程也可以打开多个文件 操作文件的过程:
struct file---> struct inode--->硬件上面的inode--->文件的内容
linux为了屏蔽文件操作的具体细节,为每一个进程创建一个“进程文件表项”,保存每一个进程打开的文件的 struct file* 的数组
struct file*fds[]
0 struct file*--->struct inode......
1 struct file*--->struct inode......
......
linux再提供操作文件的函数接口:
fd = open()
打开一个指定的文件,返回“进程文件表项”的下标,
int "文件描述符":在linux应用中,用来描述一个已经打开的文件,每一个打开的文件都有有个唯一的id,后续操作这个文件,
都是通过这个id操作该文件
read(fd)
write(fd)
close(fd)
......
linux系统提供的这些用于操作文件的接口函数(open,read.....),我们称为“系统IO”
系统IO:操作系统提供的对文件的输入输出的接口

4.linux"系统IO"的使用

  • 打开文件 open
点击查看代码
NAME
open, openat, creat - open and possibly create a file
打开或者创建(创建并打开)一个文件
SYNOPSIS
#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:打开文件的标记
O_RDONLY:只读
O_WRONLY:只写
O_RDWR:读写
以上三个标记只能选一个(文件的打开方式)
O_APPEND:追加标记,打开文件后,文件的偏移量会在文件的末尾。(默认情况下,读和写的 标记在文件的开头)
O_CREAT:创建标记,如果不存在,则创建文件
O_EXCL:该标记一般和O_CREAT配合使用,用来测试文件是否存在
如果指定O_CREAT | O_EXCL,并且文件存在,则open会失败,并且errno设置为 EEXIST,表示文件已存在
O_TRUNC:truncate 截短,清除文件内容
O_NONBLOCK:非阻塞方式打开文件
非阻塞:不等待
如果文件没有内容,read不会等待,直接返回一个错误
如果文件没有空间了,write不会阻塞,直接返回一个错误
阻塞:等待
如果文件没有内容,read会等待(直到有数据或出错)
如果文件没有空间了,write会阻塞,(直到有空间或出错)
。。。。。。
多个标记使用“|”链接(标记是使用位域实现的)
O_RDWR | O_CREAT | O_TRUNC
mode:指定创建的文件的权限,当第二个参数带有O_CREAT时,指定创建的文件的权限
返回值:成功打开一个文件,返回打开文件的文件描述符(>2 && int(下标))
操作系统会自动为每一个进程打开三个文件:
标准输入文件:文件描述符 STDIN_FILENO (0)
标准输出文件:文件描述符 STDOUT_FILENO (1)
标准出错文件:文件描述符 STDERR_FILENO (2)
失败返回-1,同时errno被设置
errno是一个全局变量,是用来保存最后一个出错的错误码
头文件: #include<srrno.h>
路径:/usr/include/errno.h
perror 把错误码对应的错误字符串打印出来
perro("user indi");
user indi:用户自己的提示信息
打印出来的形式:用户自己的提示信息:系统错误码的提示信息
int creat(const char *pathname, mode_t mode);
  • 对文件的操作(读、写...)
  • 关闭文件

最新文章

  1. Python--命令行参数解析Demo
  2. 不使用容器构建Registry
  3. Android--保持加速度传感器在屏幕关闭后运行
  4. SVN客户端解决authorization failed问题
  5. iOS 7 如何关闭已打开的应用(App)
  6. Java 保留两位小数
  7. uva - Broken Keyboard (a.k.a. Beiju Text)(链表)
  8. CodeForces 512B(区间dp)
  9. HTTP协议(二)
  10. Scala并发编程react、loop代码实战具体解释
  11. 开始在web中使用JS Modules
  12. kafka 日常使用和数据副本模型的理解
  13. 712. Minimum ASCII Delete Sum for Two Strings
  14. openvas scanner 服务未启动修复
  15. codeforces 2B The least round way(DP+数学)
  16. BZOJ 1912 巡逻(算竞进阶习题)
  17. Python——运算符
  18. Luogu P2002 消息扩散&amp;&amp;P1262 间谍网络
  19. 【个人阅读】软件工程M1/M2做一个总结
  20. C#SpinWait和volatile一点温习

热门文章

  1. 入门Python数据分析最好的实战项目(一)分析篇
  2. JAVA中计算两个日期时间的差值竟然也有这么多门道
  3. error: cannot open .git/FETCH_HEAD: Permission denied
  4. NLM5系列中继采集仪的常见问题
  5. idea201903License
  6. 抢先体验! 在浏览器里写 Flutter 是一种什么体验?
  7. 【前端面试】Vue面试题总结(持续更新中)
  8. 2022徐特立科学营&amp;BIT机器人队电控课程讲义
  9. 2022.7.19 $\mathcal{S\,\,T\,L}$
  10. 在 macOS 上搭建 Flutter 开发环境