亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

歡迎使用CSDN-markdown編輯器

2019-11-10 18:40:10
字體:
來源:轉載
供稿:網友

1、共享內存概念

共享內存是三個ipC(Inter-PRocess Communication)機制中的一個。它允許兩個不相關的進程訪問同一個邏輯內存。共享內存是在兩個正在進行的進程之間傳遞數據的一種非常有效的方式。

大多數的共享內存的實現,都把由不同進程之間共享的內存安排為同一段物理內存。共享內存是在兩個正在運行的進程之間共享和傳遞數據的一種非常有效的方式。不同進程之間共享的內存通常安排為同一段物理內存。進程可以將同一段共享內存連接到它們自己的地址空間中,所有進程都可以訪問共享內存中的地址,就好像它們是由用C語言函數malloc分配的內存一樣。而如果某個進程向共享內存寫入數據,所做的改動將立即影響到可以訪問同一段共享內存的任何其他進程。 2、共享內存使用函數

include

key_t key

key標識共享內存的鍵值: 0/IPC_PRIVATE。 當key的取值為IPC_PRIVATE,則函數shmget()將創建一塊新的共享內存;如果key的取值為0,而參數shmflg中設置了IPC_PRIVATE這個標志,則同樣將創建一塊新的共享內存。在IPC的通信模式下,不管是使用消息隊列還是共享內存,甚至是信號量,每個IPC的對象(object)都有唯一的名字,稱為“鍵”(key)。通過“鍵”,進程能夠識別所用的對象?!版I”與IPC對象的關系就如同文件名稱之于文件,通過文件名,進程能夠讀寫文件內的數據,甚至多個進程能夠共用一個文件。而在IPC的通訊模式下,通過“鍵”的使用也使得一個IPC對象能為多個進程所共用。linux系統中的所有表示System V中IPC對象的數據結構都包括一個ipc_perm結構,其中包含有IPC對象的鍵值,該鍵用于查找System V中IPC對象的引用標識符。如果不使用“鍵”,進程將無法存取IPC對象,因為IPC對象并不存在于進程本身使用的內存中。通常,都希望自己的程序能和其他的程序預先約定一個唯一的鍵值,但實際上并不是總可能的成行的,因為自己的程序無法為一塊共享內存選擇一個鍵值。因此,在此把key設為IPC_PRIVATE,這樣,操作系統將忽略鍵,建立一個新的共享內存,指定一個鍵值,然后返回這塊共享內存IPC標識符ID。而將這個新的共享內存的標識符ID告訴其他進程可以在建立共享內存后通過派生子進程,或寫入文件或管道來實現。

int size(單位字節Byte)

size是要建立共享內存的長度。所有的內存分配操作都是以頁為單位的。所以如果一段進程只申請一塊只有一個字節的內存,內存也會分配整整一頁(在i386機器中一頁的缺省大小PACE_SIZE=4096字節)這樣,新創建的共享內存的大小實際上是從size這個參數調整而來的頁面大小。即如果size為1至4096,則實際申請到的共享內存大小為4K(一頁);4097到8192,則實際申請到的共享內存大小為8K(兩頁),依此類推。

int shmflg

shmflg主要和一些標志有關。其中有效的包括IPC_CREAT和IPC_EXCL,它們的功能與open()的O_CREAT和O_EXCL相當。IPC_CREAT 如果共享內存不存在,則創建一個共享內存,否則打開操作。IPC_EXCL 只有在共享內存不存在的時候,新的共享內存才建立,否則就產生錯誤。如果單獨使用IPC_CREAT,shmget()函數要么返回一個已經存在的共享內存的操作符,要么返回一個新建的共享內存的標識符。如果將IPC_CREAT和IPC_EXCL標志一起使用,shmget()將返回一個新建的共享內存的標識符;如果該共享內存已存在,或者返回-1。 IPC_EXEL標志本身并沒有太大的意義,但是和IPC_CREAT標志一起使用可以用來保證所得的對象是新建的,而不是打開已有的對象。

這個可以用,但最好不要用: 對于用戶的讀取和寫入許可指定SHM_R和SHM_W; (SHM_R>3)和(SHM_W>3)是一組讀取和寫入許可,而(SHM_R>6)和(SHM_W>6)是全局讀取和寫入許可。

推薦使用這個: 可以使用0666|IPC_CREAT,來作為shmflg的值。

返回值

成功返回共享內存的標識符;不成功返回-1,errno儲存錯誤原因。 EINVAL 參數size小于SHMMIN或大于SHMMAX。 EEXIST 預建立key所致的共享內存,但已經存在。 EIDRM 參數key所致的共享內存已經刪除。 ENOSPC 超過了系統允許建立的共享內存的最大值(SHMALL )。 ENOENT 參數key所指的共享內存不存在,參數shmflg也未設IPC_CREAT位。 EACCES 沒有權限。 ENOMEM 核心內存不足。

struct shmid_ds

shmid_ds數據結構表示每個新建的共享內存。當shmget()創建了一塊新的共享內存后,返回一個可以用于引用該共享內存的shmid_ds數據結構的標識符。

include/linux/shm.h struct shmid_ds { struct ipc_perm shm_perm; /* Operation perms */ int shm_segsz; /* size of segment (bytes) */ __kernel_time_t shm_atime; /* last attach time */ __kernel_time_t shm_dtime; /* last detach time */ __kernel_time_t shm_ctime; /* last change time */ __kernel_ipc_pid_t shm_cpid; /* pid of creator */ __kernel_ipc_pid_t shm_lpid; /* pid of last operator */ unsigned short shm_nattch; /* no. of current attaches */ unsigned short shm_unused; /* compatibility */ void shm_unused2; / ditto - used by DIPC */ void shm_unused3; / unused */ };

struct ipc_perm

對于每個IPC對象,系統共用一個struct ipc_perm的數據結構來存放權限信息,以確定一個ipc操作是否可以訪問該IPC對象。struct ipc_perm { __kernel_key_t key; __kernel_uid_t uid; __kernel_gid_t gid; __kernel_uid_t cuid; __kernel_gid_t cgid; __kernel_mode_t mode; unsigned short seq;

}; //—————————————-

shmat void *shmat(int shmid, const void *addr, int flag); shmid:共享存儲的id addr:一般為0,表示連接到由內核選擇的第一個可用地址上,否則,如果flag沒有指定SHM_RND,則連接到addr所指定的地址上,如果flag為SHM_RND,則地址取整 flag:如前所述,一般為0 //推薦值 返回值:如果成功,返回共享存儲段地址,出錯返回-1

shmdt int shmdt(void *addr); addr:共享存儲段的地址,以前調用shmat時的返回值 shmdt將使相關shmid_ds結構中的shm_nattch計數器值減1

shmctl int shmctl(int shmid,int cmd,struct shmid_ds *buf) shmid:共享存儲段的id cmd:一些命令,有:IPC_STAT,IPC_RMID,SHM_LOCK,SHM_UNLOCK 請注意,共享內存不會隨著程序結束而自動消除,要么調用shmctl刪除,要么自己用手敲命令去刪除,否則永遠留在系統中。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人性生交大片免费看视频直播| 亚洲老司机av| 国模叶桐国产精品一区| 欧美精品在线免费观看| 久久精品色欧美aⅴ一区二区| 高清一区二区三区日本久| 国产91精品久久久久| 欧美日韩国产中文精品字幕自在自线| 亚洲欧美另类中文字幕| 日韩av观看网址| 91香蕉亚洲精品| 欧美三级免费观看| 亚洲美女av电影| 亚洲第一页自拍| 欧美亚洲激情在线| 欧美刺激性大交免费视频| 国产999在线观看| 亚洲自拍中文字幕| 欧美福利小视频| 欧美日韩精品在线观看| 欧美华人在线视频| 国产精品视频白浆免费视频| 国产精品久久在线观看| 精品无码久久久久久国产| 超碰91人人草人人干| 欧美另类极品videosbest最新版本| 日韩av在线直播| 综合欧美国产视频二区| 久久久久久久久久久免费精品| 国产精品一区二区久久久| 国产999精品| 亚洲丁香婷深爱综合| 久久久久久欧美| 欧美性猛交xxxx富婆弯腰| 国产成人精品国内自产拍免费看| 精品国产一区久久久| 欧美视频中文在线看| 亚洲精品一区久久久久久| 欧美巨猛xxxx猛交黑人97人| 国产精品久久久久久久av电影| 成人黄色av网站| 中文字幕精品在线视频| 欧美理论电影在线播放| 亚洲精品98久久久久久中文字幕| 亚洲国产日韩欧美在线图片| 亚洲欧美日韩一区在线| 91久久中文字幕| 97视频在线观看免费| 亚洲精品720p| 国产精品稀缺呦系列在线| 日韩中文字幕网| 一区二区三区视频在线| 欧美激情a∨在线视频播放| 欧美在线性爱视频| 亚洲www视频| 91久久久久久久久久久久久| 欧美日韩亚洲网| 欧美性受xxxx黑人猛交| 91丝袜美腿美女视频网站| 91久久久久久久一区二区| 亚洲国产女人aaa毛片在线| 欧美超级乱淫片喷水| 国产精品久久久久久久久久| 国产精品成人久久久久| 欧美激情综合色综合啪啪五月| 精品国产91久久久久久| 国产精品大片wwwwww| 国产日韩在线一区| 亚洲精品不卡在线| 国产精品久久久久一区二区| 精品色蜜蜜精品视频在线观看| 中文字幕亚洲综合| 久久91精品国产91久久久| 日韩经典中文字幕在线观看| 日韩精品免费在线视频观看| 欧美最猛性xxxxx免费| 国产99视频在线观看| 国产精品99久久久久久久久| 欧美专区福利在线| 中文字幕视频在线免费欧美日韩综合在线看| 国产欧美精品一区二区| 久久久久久久av| 日韩不卡中文字幕| 69影院欧美专区视频| 久久精品中文字幕免费mv| 亚洲黄色在线观看| 欧美精品久久一区二区| 欧美精品videosex性欧美| 欧美巨大黑人极品精男| 精品国产网站地址| 日韩国产高清污视频在线观看| 日韩在线观看电影| 国产精品草莓在线免费观看| www.久久草.com| 日韩美女视频免费看| 亚洲第一天堂av| 日韩欧美极品在线观看| 国产91露脸中文字幕在线| 91网在线免费观看| 国产91精品黑色丝袜高跟鞋| 国产精品高清在线观看| 欧美剧在线观看| 国产一区二区日韩| 久久精品视频免费播放| 日韩中文字幕不卡视频| 91av在线国产| 日韩欧美国产高清91| 欧美激情va永久在线播放| 午夜精品久久久久久久99热| 欧美黑人一区二区三区| 最近中文字幕日韩精品| 国产精品极品尤物在线观看| 久久久久久久久91| 国产中文字幕日韩| 国产一区二区丝袜| 国产精品久久久久久久久久久久| 国产mv免费观看入口亚洲| 亚洲最新av网址| 亚洲成av人乱码色午夜| 动漫精品一区二区| 中文字幕一区电影| 亚洲第一天堂av| 欧美精品一区二区免费| 日韩电影中文字幕在线观看| 欧洲亚洲免费在线| 少妇激情综合网| 日韩精品在线视频美女| 九九久久久久久久久激情| 国产视频丨精品|在线观看| 福利一区福利二区微拍刺激| 色综久久综合桃花网| 精品亚洲一区二区三区四区五区| 欧美特黄级在线| 国产精品福利在线观看| 日韩激情视频在线| 成人观看高清在线观看免费| 精品国产成人在线| 亚洲精品日韩久久久| 国产精品久久久久久五月尺| 日韩最新在线视频| 久久av红桃一区二区小说| 中文字幕国内精品| 91爱爱小视频k| 日韩欧美在线视频观看| 亚洲人成电影在线播放| 亚洲电影在线观看| 亚洲精品欧美一区二区三区| 成人黄色在线播放| 欧美亚洲一级片| 欧美俄罗斯性视频| 成人羞羞国产免费| 国产视频观看一区| 国产精品吴梦梦| 日韩成人激情在线| 久久69精品久久久久久久电影好| 久久久人成影片一区二区三区观看| 国产成人精品电影久久久| 欧美精品一本久久男人的天堂| 久久精品视频在线播放| 国产精品丝袜久久久久久不卡| 久国内精品在线| 影音先锋欧美在线资源| 亚洲精品视频在线播放| 日韩精品福利在线|