謝謝您的回應. 我指的是 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() 可以提供給你答案。
--
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
現代人普遍的現象: 「小學而大遺」、「捨本而逐末」
「以偏而概全」、「因噎而廢食」
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
--
[1;32m※ Origin: [33mSayYA 資訊站 [37m<bbs.sayya.org> [m
[1;31m◆ From: [36mkendlee.sayya.org[m