Linux文件共享(六)——描述符传递

  • 时间:
  • 浏览:0

3.两独立程序运行打开同一文件(共享dentry

     当另一个程序运行向从前程序运行传送一打开的文件描述符时,我们都我们都儿你会 发送程序运行和接收程序运行共享同一文件表项。下图显示了所希望的安排。

总结:程序运行间文件描述符的传递,很久 通过内核将接收文件的另一个新的file指针指向和发送程序运行的同另一个file对象,并使这人 file对象的引用计数增加。

我们都我们都儿从传递描述符函数的参数来看是个fd,我们都我们都儿知道fd是打开文件指针的在数组中的下标,是另一个整数,没了我们都我们都儿仅仅是把另一个整数传递给从前程序运行吗?答案肯定否有定的,可能性仅仅是传递整数值,没了必要专门去实现另一个api。至于深层次的的原因分析,我们都我们都儿都都还都还上能想一下,只要接受程序运行仅仅收到的是另一个整数值,他能知道哪几个,又能做哪几个呢?即使它知道这是来自从前程序运行的另一个打开文件指针的下标,从前它还是只有知道这人 下标在从前程序运行中对应的是哪个打开文件,其次,这人 下标对接收程序运行三种生活毫无意义,可能性在接受程序运行中这人 下标(fd)可能性可能性被有些打开文件占用。

Linux文件共享总结:共享程度:

通过上一节分析程序运行间文件共享,我们都我们都儿都都还都还上能知道每个程序运行的同另一个file指针下标,对应同另一个file对象,同另一个文件在另一个程序运行中是哪几个清况 ,在从前程序运行(同一程序运行中)也是哪几个清况 。很久 程序运行间只有传递文件描述符,可能性说仅仅通过fd值的传递即可达到传递描述符的效果(内核不用干预)。

1.程序运行共享(共享files_struct内部)

 

2.程序运行间描述符传递、dup、父子程序运行共享打开文件(共享file对象)

首先,我们都我们都儿先来讨论另一个间题报告 ——程序运行间传递文件描述符究竟传递的是哪几个?

我们都我们都儿又知道我们都我们都儿将另一个文件描述符传递给从前程序运行后,文件的“访问计数”会增加,这和哪几个特别像?没错,dup对于程序运行间传递文件描述符我们都我们都儿都都还都还上能看作跨程序运行的dup调用,也很久 同另一个file对象在不同程序运行间的映射,这和另一个程序运行打开同另一个文件的结果相同,很久 接受文件描述符的程序运行少了open的步骤而已,而对于网络接口返回的描述符,也只有采取传递文件描述符的法子。unix 系统中另一个法子来完成这人 任务:

BSD   sendmsg, recvmsg 法子

SYSV  ioctl 法子

注:转载请注明出处   作者:lvyilong316