【Linux 內核 內存管理內存管理系統調用 ⑤ ( 代碼示例 | 多進程共享 mmap 內存映射示例 )

      網友投稿 913 2025-03-31

      文章目錄

      一、進程一描述

      二、進程二描述

      三、mmap 進程共享內存展示

      一、進程一描述

      在上一篇博客 【linux 內核 內存管理】內存管理系統調用 ④ ( 代碼示例 | mmap 創建內存映射 | munmap 刪除內存映射 ) 中 , 完成了 進程一 的程序 ,

      在該進程中 ,

      創建并打開文件 ,

      為該文件設置大小 ,

      使用 mmap 創建 " 文件映射 " ,

      并通過直接訪問內存的方式 , 為該文件設置數據 ;

      數據設置完畢后 , 休眠 8 8 8 秒 , 在這段休眠的時間段 , 運行

      進程二

      , 在 進程二中 ,

      創建相同文件的 mmap " 文件映射 " ,

      讀取在 進程一 中寫入的文件內容 ;

      二、進程二描述

      進程二 的源碼 , 與上一篇博客 【linux 內核 內存管理】內存管理系統調用 ④ ( 代碼示例 | mmap 創建內存映射 | munmap 刪除內存映射 ) 中 進程一 源碼類似 , 只是將寫入 mmap 文件映射 數據 , 修改為 讀取 該 文件映射 數據 , 并打印出來 , 源碼如下 :

      #include #include #include #include #include #include #include /* 定義一個結構體 代表 " 學生 " 結構體成員中設置一個 char* 字符串 和 int 類型數據 分別代表 學生的 姓名 和 年齡 */ typedef struct { char name[4]; // 姓名 int age; // 年齡 }student; int main(int argc, char** argv) { // 打開文件的 文件描述符 int fd; // 循環控制變量 int i; // 學生結構體指針 , 指向 student 結構體類型變量 student* p_student; // 用于生成姓名字符串 char name_char; // 打開文件 fd = open(argv[1], O_CREAT | O_RDWR , 00777); // 創建文件映射 // NULL : 映射區的開始地址 // sizeof(student) * 1 : 文件映射區的長度 // PROT_READ | PROT_WRITE : 內存保護的標志位 , 該內存頁的內容可以 讀取 寫入 // MAP_SHARED : 指定映射關系 , 指的是該映射是進程的共享內存空間 // fd : 文件描述符 , 被映射的文件 // 0 : 被映射文件的偏移量 , 從文件的哪個字節位置開始映射 p_student = (student*)mmap(NULL, sizeof(student) * 10, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); // mmap 文件映射創建失敗 if (p_student == (void*) - 1) { printf("mmap 文件映射創建失敗 !"); return -1; } // 創建完文件映射之后 , 文件描述符就可以釋放了 close(fd); // 打印 10 個 student 結構體的數據內容 for (i = 0; i < 10; i++) { // 打印 student 結構體的 name 和 age 成員 printf("name:%s , age:%d\n", (*(p_student + i)).name, (*(p_student + i)).age); } printf("第二進程 mmap 文件映射展示完畢 !\n"); return 0; }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      【Linux 內核 內存管理】內存管理系統調用 ⑤ ( 代碼示例 | 多進程共享 mmap 內存映射示例 )

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      上述源碼 , 放在 mmap_demo_02.c 文件中 , 執行

      gcc mmap_demo_02.c -o mmap_demo_02

      1

      命令 , 編譯該源碼 , 編譯出的可執行文件為 mmap_demo_02 ;

      三、mmap 進程共享內存展示

      先執行 進程一 mmap_demo_01 可執行程序 , 進程一 中通過 mmap 文件映射向文件中寫出數據后 , 進入休眠階段 ,

      再執行進程二 mmap_demo_02 , 使用 mmap 文件映射訪問 file 文件 , 此時打印出 進程一 中通過 mmap 文件映射寫出的文件數據 ;

      Linux 任務調度 項目管理 ProjectMan

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:wps表格數據如何快速錄入數據(wps文檔導入表格數據)
      下一篇:文檔檢查器在哪兒?(系統文件檢查器怎么打開)
      相關文章
      中文字幕乱码亚洲无线三区| 亚洲av无码乱码国产精品fc2| 亚洲国产一二三精品无码| 亚洲国产高清精品线久久| 亚洲国产av玩弄放荡人妇| 亚洲熟妇无码av另类vr影视| 亚洲人成电影青青在线播放| 亚洲图片校园春色| 亚洲伊人久久大香线蕉啊| 亚洲日本国产精华液| 亚洲最新在线视频| 亚洲午夜电影在线观看| 亚洲国产成人精品电影| 亚洲国产成人超福利久久精品| 亚洲国产一区在线观看| 亚洲国产精品xo在线观看| 久久精品国产99国产精品亚洲| 亚洲a∨无码男人的天堂| 国产成人亚洲精品| 亚洲日韩久久综合中文字幕| 在线观看亚洲AV每日更新无码 | 亚洲综合另类小说色区| 亚洲日韩国产一区二区三区| 中文字幕亚洲综合久久男男| 亚洲中文字幕无码一区| 国产亚洲综合成人91精品| 亚洲AV无码不卡在线播放| 99久久亚洲精品无码毛片| 亚洲欧洲国产综合| 天堂亚洲国产中文在线| 亚洲AV日韩综合一区| 亚洲国产成人五月综合网| 亚洲一区AV无码少妇电影☆| 久久综合图区亚洲综合图区| 久久夜色精品国产噜噜亚洲AV| 亚洲国产精品综合一区在线| 亚洲国产成人无码AV在线影院 | 亚洲老熟女@TubeumTV| www.亚洲成在线| 人人狠狠综合久久亚洲| 久99精品视频在线观看婷亚洲片国产一区一级在线 |