申請共享記憶體快後,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 動態分割槽分配 當程式被載入執行時,分配乙個程序指定大小可變的分割槽 ...