文件共享的实现方式

⽂件共享的实现⽅式
1、什么是⽂件共享
(1)⽂件共享就是同⼀个⽂件(同⼀个⽂件指的是同⼀个inode,同⼀个pathname)被多个独⽴的读写体(⼏乎可以理解为多个⽂件描述符)去同时(⼀个打开尚未关闭的同时另⼀个去操作)操作。
(2)⽂件共享的意义有很多:譬如我们可以通过⽂件共享来实现多线程同时操作同⼀个⼤⽂件,以减少⽂件读写时间,提升效率。
2、⽂件共享的3种实现⽅式
(1)⽂件共享的核⼼就是怎么弄出来多个⽂件描述符指向同⼀个⽂件。北京心理学函授学院
(2)常见的有3种⽂件共享的情况:第⼀种是同⼀个进程中多次使⽤open打开同⼀个⽂件,第⼆种是在不同进程中去分别使⽤open打开同⼀个⽂件(这时候因为两个fd在不同的进程中,所以两个fd的数字可以相同也可以不同),第三种情况是后⾯要学的,linux系统提供了dup 和dup2两个API来让进程复制⽂件描述符。
(3)我们分析⽂件共享时的核⼼关注点在于:分别写/读还是接续写/读文本框只读
3、再论⽂件描述符中草药提取物
(1)⽂件描述符的本质是⼀个数字,这个数字本质上是进程表中⽂件描述符表的⼀个表项,进程通过⽂件描述符作为index去索引查表得到⽂件表指针,再间接访问得到这个⽂件对应的⽂件表。
(2)⽂件描述符这个数字是open系统调⽤内部由操作系统⾃动分配的,操作系统分配这个fd时也不是随意分配,也是遵照⼀定的规律的,我们现在就要研究这个规律。
(3)操作系统规定,fd从0开始依次增加。fd也是有最⼤限制的,在linux的早期版本中(0.11)fd最⼤是20,所以当时⼀个进程最多允许打开20个⽂件。linux中⽂件描述符表是个数组(不是链表),所以这个⽂件描述符表其实就是⼀个数组,fd是index,⽂件表指针是value (4)当我们去open时,内核会从⽂件描述符表中挑选⼀个最⼩的未被使⽤的数字给我们返回。也就是说如果之前fd已经占满了0-9,那么我们下次open得到的⼀定是10.(但是如果上⼀个fd得到的是9,下⼀个不⼀定是10,这是因为可能前⾯更⼩的⼀个fd已经被close释放掉了)
(5)fd中0、1、2已经默认被系统占⽤了,因此⽤户进程得到的最⼩的fd就是3了。
(6)linux内核占⽤了0、1、2这三个fd是有⽤的,当我们运⾏⼀个程序得到⼀个进程时,内部就默认已经打开了3个⽂件,这三个⽂件对应的fd就是0、1、2。这三个⽂件分别叫stdin、stdout、stderr。也就是标准输⼊、标准输出、标准错误。
(7)标准输⼊⼀般对应的是键盘(可以理解为:0这个fd对应的是键盘的设备⽂件),标准输出⼀般是LCD显⽰器(可以理解为:1对应LCD 的设备⽂件)
(8)printf函数其实就是默认输出到标准输出stdout上了。stdio中还有⼀个函数叫fpirntf,这个函数就可以指定输出到哪个⽂件描述符中。
fds#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FILENAME "1.txt"
int main(void)
{
FILE *fp = NULL;
size_t len = -1;
int array[10] = {1,2,3,4,5};
char buf[100] = {0};
fp = fopen(FILENAME,"r+");
if(NULL == fp)
{
perror("fopen");诗歌的特点
exit(-1);
}
printf("fopen success. fp = %p.\n",fp);
//len = fwrite(array,sizeof(int),sizeof(array)/sizeof(array[0]),fp); //printf("len = %lu\n",len);
memset(buf,0,sizeof(buf));
河南化肥厂爆炸
len = fread(buf,1,10,fp);
printf("read len = %lu,buf = [%s]\n",len,buf);
return 0;
}

本文发布于:2024-09-21 16:27:22,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/473986.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:描述符   进程   输出   数字
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议