Re: [問題] Linux下的共享記憶體配置二維陣列

看板Programming作者時間18年前 (2006/10/20 04:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/4 (看更多)
※ 引述《tedpola.bbs@ptt.cc (破破茶杯)》之銘言: > 謝謝您的回應. 我指的是 int** 這樣的配置方式. > 陣列的大小在 run-time 的時候才能得知 > 問題在於要怎麼在 share memory 裡頭進行存取 好像有點自找麻煩? 老實說不大清楚你這樣搞二維 shm 的實際用途意義為何,因為就算是 二維的,那您實際上要怎樣使用? 因為 shm 二維與一般 malloc() 配置 來的二維使用方式是完全不大一樣。 一般傳統方式: /* p[10][100]; */ int **p; int i; p = (int **) malloc(sizeof(int *) * 10; for(i=0;i<10;i++) p[i] = malloc(sizeof(int) * 100); 至於你說的 shm 方式,一樣作法方式: ---------------------------------------------------------------- shmput: key_t key; int shmid; int **p; int i; char buf[10]; key = ftok("/dev/null", 'A'); shmid = shmget(key, sizeof(int *) * 10, 0644 | IPC_CREAT); p = (int **) shmat(shmid, (void *)0, 0); for(i=0;i<10;i++) { key = ftok("/dev/null", 'A'+i+1); shmid = shmget(key, sizeof(int) * 100, 0644 | IPC_CREAT); p[i] = (int *) shmat(shmid, (void *)0, 0); } for(i=0;i<10;i++) { sprintf(buf,"hello world(%d)",i); strcpy((char *)p[i],buf); shmdt(p[i]); } ---------------------------------------------------------------- shmget: key_t key; int shmid; int **p; int i; char buf[10]; key = ftok("/dev/null", 'A'); shmid = shmget(key, 0, 0644 | IPC_CREAT); p = (int **) shmat(shmid, (void *)0, 0); for(i=0;i<10;i++) { key = ftok("/dev/null", 'A'+i+1); shmid = shmget(key, 0, 0644 | IPC_CREAT); p[i] = (int *) shmat(shmid, (void *)0, 0); } for(i=0;i<10;i++) { printf("item %d, msg: %s\n",i,p[i]); shmdt(p[i]); } 片段 code 提供給你參考。 至於 shm 有多大有多少筆資料,shmctl() 可以提供給你答案。 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 現代人普遍的現象: 「小學而大遺」、「捨本而逐末」 「以偏而概全」、「因噎而廢食」 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ※ Origin: SayYA 資訊站 <bbs.sayya.org> ◆ From: kendlee.sayya.org
文章代碼(AID): #15D-3B00 (Programming)
文章代碼(AID): #15D-3B00 (Programming)