新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 分析fork后多進(jìn)程對(duì)文件的共享

        分析fork后多進(jìn)程對(duì)文件的共享

        作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏
        fork函數(shù)是創(chuàng)建一個(gè)新的進(jìn)程作為原進(jìn)程的子進(jìn)程,創(chuàng)建的子進(jìn)程和父進(jìn)程存在很多的相似性,首先父子進(jìn)程的虛擬存儲(chǔ)空間的用戶空間是相同的,是將父進(jìn)程的拷貝給子進(jìn)程。同時(shí)父子進(jìn)程對(duì)文件的操作是共享方式。因?yàn)楦高M(jìn)程的文件描述符表被拷貝給了子進(jìn)程(具體的原理參虛擬存儲(chǔ)器的內(nèi)容,私有對(duì)象寫(xiě)時(shí)拷貝實(shí)現(xiàn)了父子進(jìn)程之間形成相互獨(dú)立的地址空間)。因此父進(jìn)程打開(kāi)的所有文件描述符都在子進(jìn)程中保存了(每個(gè)進(jìn)程都有獨(dú)立的描述符表)。由于所有的進(jìn)程共享文件表、v-node表,所以父子進(jìn)程的描述符表也是相同的,所以父子進(jìn)程對(duì)文件是以共享的方式存在的。
        #include
        #include
        #include
        #include
        #include
        #include
        #include
        int main()
        {
        int fd;
        char c[3];
        /*打開(kāi)文件foobar.txt,采用的是只讀形式*/
        fd = open("foobar.txt",O_RDONLY,0);
        if(fork()==0)//子進(jìn)程
        {
        read(fd,&c,2);/*讀文件的一個(gè)字節(jié)到c中*/
        c[2]= 主站蜘蛛池模板: 洪雅县| 新沂市| 玉龙| 北票市| 汾阳市| 资溪县| 香格里拉县| 馆陶县| 怀远县| 德清县| 长葛市| 莱芜市| 黔西县| 花垣县| 东兴市| 阳西县| 浏阳市| 界首市| 南通市| 乌鲁木齐县| 迁西县| 澄江县| 南岸区| 闻喜县| 绵竹市| 蒙城县| 越西县| 台州市| 定西市| 若羌县| 永新县| 江安县| 保德县| 清远市| 彰化县| 东光县| 南京市| 无为县| 天台县| 西平县| 安福县|