fork()子进程与父进程

上传人:ni****g 文档编号:466440381 上传时间:2023-02-17 格式:DOCX 页数:3 大小:124.34KB
返回 下载 相关 举报
fork()子进程与父进程_第1页
第1页 / 共3页
fork()子进程与父进程_第2页
第2页 / 共3页
fork()子进程与父进程_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《fork()子进程与父进程》由会员分享,可在线阅读,更多相关《fork()子进程与父进程(3页珍藏版)》请在金锄头文库上搜索。

1、在C程序中,文件由文件指针或者文件描述符表示。ISO C的标准I/O库函数 (fopen, fclose, fread, fwrite, fscanf, fprintf等)使用文件扌旨针,UNIX 的I/O函数(open, close, read, write, ioctl)使用文件描述符。下面重点 来说下,文件描述符是如何工作的。文件描述符相当于一个逻辑句柄,而open,close等函数则是将文件或者物理设 备与句柄相关联。句柄是一个整数,可以理解为进程特定的文件描述符表的 索 引。先介绍下面三个概念,后面讲下open、close等操作以后,文件和文件描述 符产生什么关系,以及fork后文件

2、描述符的继承等问题。文件描述符表:用户区的一部分,除非通过使用文件描述符的函数,否则程序无 法对其进行访问。对进程中每个打开的文件,文件描述符表都包含一个条目。 系统文件表:为系统中所有的进程共享。对每个活动的 open, 它都包含一个条 目。每个系统文件表的条目都包含文件偏移量、访问模式(读、写、 or 读-写) 以及指向它的文件描述符表的条目计数。内存索引节点表: 对系统中的每个活动的文件(被某个进程打开了),内存中索 引节点表都包含一个条目。几个系统文件表条目可能对应于同一个内存索引节点 表(不同进程打开同一个文件)。1、举例:执行 myfd = open( /home/lucy/my.

3、dat, 0_RD0NLY);以后,上述 3 个表的关系原理图如下:系统文件表包含一个偏移量,给出了文件当前的位置。若 2 个进程同时打开一个 文件(如上图A,B)做读操作,每个进程都有自己相对于文件的偏移量,而且读入 整个文件是独立于另一个进程的;如果 2 个进程打开同一个文件做写操作, 写操作是相互独立的,每个进程都可以重写另一个进程写入的内容。如果上面进程在open以后又执行了 close ()函数,操作系统会删除文件描述 符表的第四个条目和系统文件表的对应条目(若指向它的描述符表唯一), 并 对内存索引节点表条目中的计数减 1,如果自减以后变为 0,说明没有其他进程 链接此文件,将索引

4、节点表条目也删除,而这里进程B也在open这个文件,所 以 索引节点表条目保留。2、文件描述符的继承通过fork ()创建子进程时,子进程继承父进程环境和上下文的大部分内容的 拷贝,其中就包括文件描述符表。(1)对于父进程在fork ()之前打开的文件来说,子进程都会继承,与父进程 共享相同的文件偏移量。如下图所示(0-1-2 表示 标准输入-输出-错误):图 2 forkQmy,d at系统文件表位于系统空间中,不会被fork ()复制,但是系统文件表中的条目会 保存指向它的文件描述符表的计数,fork()时需要对这个计数进行维护,以体 现子进程对应的新的文件描述符表也指向它。程序关闭文件时,也是将系统文件 表条目内部的计数减一,当计数值减为 0 时,才将其删除。(2)相反,如果父进程先进程fork,再打开my.dat,这时父子进程关于my.dat 的文件描述符表指向不同的系统文件表条目,也不再共享文件偏移量(fork以 后2个进程分别open,在系统文件表中创建2个条目);但是关于标准输入,标 准输出,标准错误,父子进程还是共享的。內存中索引节点表、屋3 forkij以后打开my.clmt文件描述持表系统文件表(SFT用户程序区4内核区Hume/媒咖话卜 的条巨gto-dat)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号