新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 采用mmap實現(xiàn)文件的復制

        采用mmap實現(xiàn)文件的復制

        作者: 時間:2016-12-01 來源:網(wǎng)絡 收藏
        #include

        #include
        #include
        #include
        #include
        #include
        #include
        #include
        #include

        本文引用地址:http://www.104case.com/article/201612/324548.htm

        int main(int argc,char *argv[])
        {
        /*參數(shù)檢測*/
        if(argc < 2)
        {
        printf("Error!!");
        exit(-1);
        }
        /*打開文件,采用系統(tǒng)函數(shù)*/
        int fd =open("/home/gong/program/cprogram/signal12.c",O_RDONLY);
        /*采用mmap實現(xiàn)普通文件到進程虛擬存儲器的關聯(lián)*/
        /*也就是將大小隨意的文件以寫時拷貝頁的方式實現(xiàn)文件到進程虛擬存儲器的映射*/
        char * p = (char *)mmap(NULL,atoi(argv[argc-1]),PROT_READ,MAP_PRIVATE,fd,0);
        /*將存儲器中的數(shù)據(jù)打印到標準輸出流中*/
        fprintf(stdout,p);

        /*關閉文件描述符*/
        close(fd);
        exit(0);
        }

        編譯調試:
        [gong@Gong-Computer cprogram]$ gcc -g mmapTest.c -o mmapTest
        [gong@Gong-Computer cprogram]$ ./mmapTest 4096
        #include
        #include
        #include
        #include
        #include
        #include
        #include

        #define MAXBUF2048
        void hander1(int sig)
        {
        pid_t pid;
        while((pid = waitpid(-1,NULL,0))>0)
        {
        printf("Hander reaped child 1",(int)getpid());
        }
        if(errno != ECHILD)
        {
        printf("Error!!");
        exit(-1);
        }
        sleep(2);
        return ;
        }
        int main()
        {
        int i,n;
        char buf[MAXBUF];
        if(signal(SIGCHLD,hander1)==SIG_ERR)
        {
        printf("error!!");
        exit(-1);
        }
        for(i = 0; i< 3; i++)
        {
        if(fork() == 0)/*子進程*/
        {
        printf("Hellofromchild 2",(int)getpid());
        sleep(1);
        exit(0);
        }
        }
        /*父進程處理*/
        if((n = read(STDIN_FILENO,buf,sizeof(buf)))<0)
        {
        printf("error!!");
        exit(-1);
        }
        printf("parent processing input");
        while(1)
        ;
        exit(0);
        }
        以上的結果表明實現(xiàn)了將普通的文件采用mmap到進程的虛擬存儲器的加載。其實采用dbg即可檢測是否映射成功,但是采用stdout可以更加的直觀。



        關鍵詞: mmap虛擬存儲

        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 阜平县| 湖南省| 张家港市| 留坝县| 独山县| 孝义市| 乐业县| 奉贤区| 容城县| 迁安市| 溧阳市| 昭通市| 东至县| 宾阳县| 古蔺县| 望谟县| 青神县| 通山县| 鄄城县| 广灵县| 浪卡子县| 阿克陶县| 邻水| 通山县| 扎鲁特旗| 铁力市| 保定市| 叙永县| 泽库县| 浏阳市| 隆林| 南靖县| 昭觉县| 深州市| 邹平县| 大渡口区| 清徐县| 明水县| 射阳县| 江津市| 海南省|