共享記憶體對映(linux程式與執行緒學習筆記)

嵌入式~皮皮發表於2020-10-05

 共享記憶體對映 - shmat
 
    #include<sys/ipc.h>
    #include<sys/shm.h>
    
    void *shmat(int shmid,const void *shmaddr,int shmflg);
    
    成功時返回對映後的地址,失敗時返回(void *)-1
    
    shmid 要對映的共享記憶體id
    
    shmaddr 對映後的地址,NULL表示由系統自動對映
    
    shmflg 標誌位 0表示可讀寫;SHM_RDONLY表示只讀
    
 共享記憶體撤銷對映 - shmdt
 
    #include<sys/ipc.h>
    #include<sys/shm.h>
    
    int shmdt(void *shmaddr);
    
    成功時返回0,失敗時返回EOF
    
    不使用共享記憶體時應撤銷對映
    
    程式結束時自動撤銷
    
 共享記憶體控制 - shmctl
 
    #include<sys/ipc.h>
    #include<sys/shm.h>
    
    int shmctl(int shmid,int cmd,struct shmid_ds *buf);
    
    成功時返回0,失敗時返回EOF
    
    shmid 要操作的共享記憶體的id
    
    cmd 要執行的操作 IPC_STAT IPC_SET IPC_RMID
    
    buf 儲存或設定共享記憶體屬性的地址
    
 共享記憶體 - 注意事項
 
    每塊共享記憶體大小有限制
    
        ipcs -l
        
    共享內傳刪除的時間點
    
        shmct(shmid,IPC_RMID,NULL);//新增刪除標記
        
        nattach變成0時真正刪除

相關文章