<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## mmap ## 建立內存映射 ### 相關函數 ### munmap,open ### 表頭文件 ### ``` #include <unistd.h> #include <sys/mman.h> ``` ### 定義函數 ### ``` void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offsize); ``` ### 函數說明 ### mmap()用來將某個文件內容映射到內存中,對該內存區域的存取即是直接對該文件內容的讀寫。參數start指向欲對應的內存起始地址,通常設為NULL,代表讓系統自動選定地址,對應成功后該地址會返回。參數length代表將文件中多大的部分對應到內存。 ### 參數 ### prot代表映射區域的保護方式有下列組合 PROT_EXEC 映射區域可被執行 PROT_READ 映射區域可被讀取 PROT_WRITE 映射區域可被寫入 PROT_NONE 映射區域不能存取 ### 參數 ### flags會影響映射區域的各種特性 MAP_FIXED 如果參數start所指的地址無法成功建立映射時,則放棄映射,不對地址做修正。通常不鼓勵用此旗標。 MAP_SHARED對映射區域的寫入數據會復制回文件內,而且允許其他映射該文件的進程共享。 MAP_PRIVATE 對映射區域的寫入操作會產生一個映射文件的復制,即私人的“寫入時復制”(copy on write)對此區域作的任何修改都不會寫回原來的文件內容。 MAP_ANONYMOUS建立匿名映射。此時會忽略參數fd,不涉及文件,而且映射區域無法和其他進程共享。 MAP_DENYWRITE只允許對映射區域的寫入操作,其他對文件直接寫入的操作將會被拒絕。 MAP_LOCKED 將映射區域鎖定住,這表示該區域不會被置換(swap)。 在調用mmap()時必須要指定MAP_SHARED 或MAP_PRIVATE。參數fd為open()返回的文件描述詞,代表欲映射到內存的文件。參數offset為文件映射的偏移量,通常設置為0,代表從文件最前方開始對應,offset必須是分頁大小的整數倍。 ### 返回值 ### 若映射成功則返回映射區的內存起始地址,否則返回MAP_FAILED(-1),錯誤原因存于errno 中。 ### 錯誤代碼 ### EBADF 參數fd 不是有效的文件描述詞 EACCES 存取權限有誤。如果是MAP_PRIVATE 情況下文件必須可讀,使用MAP_SHARED則要有PROT_WRITE以及該文件要能寫入。 EINVAL 參數start、length 或offset有一個不合法。 EAGAIN 文件被鎖住,或是有太多內存被鎖住。 ENOMEM 內存不足。 ### 范例 ### ``` /* 利用mmap()來讀取/etc/passwd 文件內容*/ #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> #include<unistd.h> #include<sys/mman.h> main() { int fd; void *start; struct stat sb; fd=open(“/etc/passwd”,O_RDONLY); /*打開/etc/passwd*/ fstat(fd,&sb); /*取得文件大小*/ start=mmap(NULL,sb.st_size,PROT_READ,MAP_PRIVATE,fd,0); if(start= = MAP_FAILED) /*判斷是否映射成功*/ return; printf(“%s”,start); munma(start,sb.st_size); /*解除映射*/ closed(fd); } ``` ### 執行 ### ``` root : x : 0 : root : /root : /bin/bash bin : x : 1 : 1 : bin : /bin : daemon : x : 2 : 2 :daemon : /sbin adm : x : 3 : 4 : adm : /var/adm : lp : x :4 :7 : lp : /var/spool/lpd : sync : x : 5 : 0 : sync : /sbin : bin/sync : shutdown : x : 6 : 0 : shutdown : /sbin : /sbin/shutdown halt : x : 7 : 0 : halt : /sbin : /sbin/halt mail : x : 8 : 12 : mail : /var/spool/mail : news : x :9 :13 : news : /var/spool/news : uucp : x :10 :14 : uucp : /var/spool/uucp : operator : x : 11 : 0 :operator : /root: games : x : 12 :100 : games :/usr/games: gopher : x : 13 : 30 : gopher : /usr/lib/gopher-data: ftp : x : 14 : 50 : FTP User : /home/ftp: nobody : x :99: 99: Nobody : /: xfs :x :100 :101 : X Font Server : /etc/xll/fs : /bin/false gdm : x : 42 :42 : : /home/gdm: /bin/bash kids : x : 500 :500 :/home/kids : /bin/bash ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看