• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            洗塵齋

            三懸明鏡垂鴻韻,九撩清泉洗塵心

            常用鏈接

            統(tǒng)計

            最新評論

            mmap進(jìn)行文件映射可能遇到的問題

                mmap函數(shù)實現(xiàn)把一個文件映射到一個內(nèi)存區(qū)域,從而我們可以像讀寫內(nèi)存一樣讀寫文件,他比單純調(diào)用read/write也要快上許多。在某些時候我們可以把內(nèi)存的內(nèi)容拷貝到一個文件中實現(xiàn)內(nèi)存?zhèn)浞荩?dāng)然,也可以把文件的內(nèi)容映射到內(nèi)存來恢復(fù)某些服務(wù)。另外,mmap實現(xiàn)共享內(nèi)存也是其主要應(yīng)用之一,mmap系統(tǒng)調(diào)用使得進(jìn)程之間通過映射同一個普通文件實現(xiàn)共享內(nèi)存。
            關(guān)于mmap的內(nèi)容請看《Unix環(huán)境高級編程》12章。在這里,說一下使用mmap函數(shù)時可能遇到的問題:
                    //下面的代碼把文件1.ls中的內(nèi)容通過mmap函數(shù)寫入2.ls中,忽略出錯處理

                    int
             fd=open("1.ls",O_RDONLY);
                    
            int fd2=open("2.ls",O_CREAT|O_RDWR|O_TRUNC,S_IRUSR|S_IWUSR);//必須設(shè)置讀寫權(quán)限,若只有寫權(quán)限,會產(chǎn)生SIGSEGV信號
                                                                            
            //mmap進(jìn)行文件映射時必須先讀取文件`

                    
            struct stat st;
                    fstat(fd,
            &st);
                    lseek(fd2,st.st_size
            -1,SEEK_SET);
                    write(fd2,
            "",1);        //必須的,如果不設(shè)置,當(dāng)寫入數(shù)據(jù)的時候會遇到文件結(jié)束符,產(chǎn)生SIGBUS信號
                    void *_src=mmap(NULL,st.st_size,PROT_READ,MAP_SHARED, fd,0);
                    
            void *_des=mmap(NULL,st.st_size,PROT_WRITE,MAP_SHARED,fd2,0);

                    close(fd);      
            //關(guān)閉文件后 依然可修改文件內(nèi)容
                    close(fd2);
                    memcpy(_des,_src,st.st_size);

            總結(jié)一下,可能產(chǎn)生的問題如下:
                1.進(jìn)行文件映射的描述符必須擁有讀權(quán)限,否則會產(chǎn)生SIGSEGV信號
                2.把內(nèi)存內(nèi)容寫入映射文件時,必須確保被寫文件當(dāng)前位置到文件結(jié)尾的長度不小于所寫內(nèi)容長度,否則產(chǎn)生SIGBUS信號
                3.關(guān)閉文件描述符并不能保證文件內(nèi)容不被修改
                4.munmap并不能使映射的內(nèi)容寫回磁盤

            posted on 2007-09-13 10:56 芥之舟 閱讀(4036) 評論(0)  編輯 收藏 引用 所屬分類: unix

            久久亚洲国产精品五月天婷| 久久午夜无码鲁丝片| 久久人妻少妇嫩草AV蜜桃| 久久久久亚洲精品日久生情| 久久综合九色综合网站| 久久93精品国产91久久综合| 精品综合久久久久久97| 99精品久久久久中文字幕| 久久久久99精品成人片牛牛影视| 区久久AAA片69亚洲| 91精品国产91热久久久久福利| 精品国产99久久久久久麻豆| 久久精品成人免费看| 麻豆精品久久久久久久99蜜桃| 免费精品99久久国产综合精品| 久久久久亚洲AV无码观看| 久久93精品国产91久久综合 | 亚洲αv久久久噜噜噜噜噜| 69国产成人综合久久精品| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 人妻精品久久久久中文字幕69| 91久久精品无码一区二区毛片| 久久精品亚洲精品国产欧美| 国内精品久久久久伊人av| 久久精品极品盛宴观看| 久久亚洲天堂| 麻豆久久| 开心久久婷婷综合中文字幕| 青青热久久综合网伊人| 少妇久久久久久被弄高潮| 久久综合伊人77777| 久久WWW免费人成—看片| 7国产欧美日韩综合天堂中文久久久久 | 久久水蜜桃亚洲av无码精品麻豆 | 久久无码人妻一区二区三区| 久久久久久久久波多野高潮| 久久这里只有精品视频99| 精品多毛少妇人妻AV免费久久| 99热都是精品久久久久久| 精品久久久久久国产免费了| 狠狠人妻久久久久久综合蜜桃|