學習筆記 作業系統實驗3共享記憶體塊的問題

2021-08-14 04:20:54 字數 1959 閱讀 8314

申請共享記憶體快後,shmat進行繫結給乙個char*,死活操作不了這個char*,最後把申請的記憶體塊大小列印出來,結果是0,但是申請記憶體塊的函式執行是正確的,我在另乙個終端通過ipc -a檢視共享記憶體資訊看到那塊記憶體是有大小的,就是我指定申請的大小,實在找不到別的原因了...暫時記下來

#include #include #include #include #include #include #include #include #include /*將以上標頭檔案 shm.h  types.h  ipc.h  stat.h 中sys改為linux後,許多奇怪的redefinition錯誤消失了*/

#define file_op_size 128

#define shared_segment_size 1024

void p(int semid,int index)

void v(int semid,int index)

int main()

printf("creat the shared_memory:%d\n",segment_id[i]);

/*確定記憶體塊的大小*/

ret=shmctl(segment_id[i],ipc_stat,&shmbuffer);

if(ret!=0)

segment_size=shmbuffer.shm_segsz;

printf("segment size:%d\n",segment_size); //這裡輸出的是0!!!

} //建立訊號燈

int semid = semget(0,2,ipc_creat|0666); //建立了2個訊號燈

//訊號燈賦值

union semun sem_args1;

sem_args1.val=10;

ret = semctl(semid,0,setval,sem_args1); //0:第乙個訊號燈,可寫的個數

union semun sem_args2;

sem_args2.val=0;

ret = semctl(semid,1,setval,sem_args2); //1:第二個訊號燈,可讀的個數

p_r=fork();

if(p_r==0)

// long offset=0;

//printf("sizeof shmaddr:%d\n",sizeof(shmaddr1));

printf("讀程序開始進入迴圈!\n");

while(1)

fclose(fp1);

printf("讀程序退出!\n");

return 0; }

p_w=fork();

if(p_w==0)

printf("sizeof shmaddr:%d\n",sizeof(shmaddr2));

printf("寫程序開始進入迴圈!\n");

while(1)

fclose(fp2);

printf("寫程序退出!\n");

return 0;

} waitpid(p_w,&status,0);

waitpid(p_r,&status,0);

//destroy10個共享記憶體塊

for(int i=0;i<10;i++)

// 刪除訊號燈

ret =semctl(semid,1,ipc_rmid);

printf("主程序退出!\n");

return 0;

}

終於找到問題了,標頭檔案改為:

#include #include #include #include #include #include #include #include //!!!can't use linux!!!

#include

就好了,真是gg,原因大概 是系統版本不一樣,系統自帶的標頭檔案的內容也不太一樣,具體要找到標頭檔案自己看內容

作業系統筆記 程序共享記憶體

1.建立編輯hdpark.c檔案如下 include include include include include include intmain else return0 2.gcc o hdpark hdpark.c 將其編譯 3.執行 hdpark 輸出 child write hi the...

《現代作業系統》筆記 記憶體管理3

接上 缺點 有可能置換出頻繁使用的頁 缺陷 前提是必須要知道接下來哪些頁面要使用,完全理想的情況,不可能實現。但可作為衡量演算法優劣的標準,結果越接近的越優秀。頁表中節點的訪問位 reference 和修改位 modified 當被訪問後,r位會被設定 當被修改後,m位會被修改。但每過乙個週期,r位...

作業系統學習筆記3

1 快取最快,快取未命中,記憶體,記憶體找不到,缺頁,外存 2 儲存管理單元將虛擬邏輯位址轉換為實際實體地址 3 抽象 保護 共享 虛擬化 4 管理方式 重定位 分段 分頁 虛擬儲存 5 位址生成時機 編譯時 載入時 執行時 6 動態分割槽分配 當程式被載入執行時,分配乙個程序指定大小可變的分割槽 ...