Linux的I/O操作

进程和打开文件之间的关系

没有打开的文件是在磁盘上的,
打开的文件是加载到内存中的。并且OS为其创建相应的数据结构struct file用来描述相关属性。
在这里插入图片描述

fd的使用规则,优先使用小的,每次进程运行都要默认打开0,1,2(分别是标准输入,标准输出,标准错误)

语言层面的操作都要贯穿操作系统

在这里插入图片描述

另外,用户层–>OS缓冲区刷新是以数据拷贝的方式,所以原来缓冲区的数据并不会消失,只是文件指针会移动而已

重定向的底层原理:
在这里插入图片描述

int main()
 11 {
 12     int fd = open("log.txt",O_CREAT | O_WRONLY,0664);
 13     dup2(fd,1);
 14     printf("hello chen\n");
 15     printf("hello chen\n");
 16     printf("hello chen\n");
 17     printf("hello chen\n");
 18 
 19     write(fd,"hahahahahahaah\n",25);
 20     write(1,"xxxxxxxxxxxxx\n",25);                                                                                                           
 21                                                                                                                                    
 22     return 0;
 23 }  

解释神奇的现象
现象1:

关闭标准输出,fd占用1,也就是说printf应该向文件log.txt写入,但是我们发现log.txt中并没有内容,原因就是
由向显示器输出改为向普通文件中输出,行缓冲变为全缓冲,即进程退出才会刷新,而进程还没有退出的时候,
就关闭了fd,找不到文件内核缓冲区了。

10 int main()
 11 {
 12     close(1);
 13     int fd = open("./log.txt",O_WRONLY | O_CREAT,0644);
 14     if(fd < 0)
 15     {
 16       printf("error\n");
 17       exit(-1);
 18     }
 19 
 20     printf("hello chen\n");
 21     printf("hello chen\n");
 22     printf("hello chen\n");
 23     printf("hello chen\n");
 24     printf("hello chen\n");
 25     printf("hello chen\n");
 26     close(fd);                                                                                                                               
 27 
 28     return 0;
 29 }
 30 

现象2:
在这里插入图片描述
在这里插入图片描述

文件系统(管理磁盘空间)

文件 = 文件内容 + 文件属性。
文件是放在磁盘上的,被进程打开后是加载到内存中的。
如何管理分类文件呢? 先讨论一下磁盘。
磁盘是相当大的空间,有C盘,F盘,D盘,E盘,,,,,,,,,,
但是呢对于这些硬件来说,我们只需要会管理一块空间,用相同的方法去管理所有的空间即可。
在这里插入图片描述

当你创建文件时操作系统都做了什么呢?
目录也是文件,目录里面存放的就是inode编号和文件名之间的链接关系。
在这里插入图片描述

软硬链接

软连接:本身是一个独立的文件,有自己的inode,也有自己的数据块,保存的是指向文件的所在路径和文件名。
硬链接:本能不是独立的文件,本身是链接文件的一份拷贝,和链接的文件以写时拷贝的方式共享数据。
在这里插入图片描述

动静态库的制作

库:本身就是.o文件(目标文件)的集合。
我们只需要向.c源文件编译生成.o文件,并提供相应的头文件和库即可
在这里插入图片描述

静态库的制作和使用
在这里插入图片描述
动态库的制作和使用
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

通过全部用例

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值