亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 9202 | 回復(fù): 11
打印 上一主題 下一主題

共享內(nèi)存和結(jié)構(gòu)體數(shù)組 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2005-12-13 13:33 |只看該作者 |倒序?yàn)g覽
現(xiàn)有一結(jié)構(gòu)

  1. struct A
  2. {
  3.     int a;
  4.     int b;
  5.     char x[32];
  6.     struct B *ok;
  7. };
  8. struct B
  9. {
  10.     int c;
  11.     int d;
  12.     int e;
  13.     char f[32];
  14.     char f[32];
  15. };
復(fù)制代碼

現(xiàn)在聲明了一個(gè)結(jié)構(gòu)數(shù)組

  1. struct A hh[4];
復(fù)制代碼

數(shù)組中的每一個(gè)結(jié)構(gòu)都付了初值,
現(xiàn)在創(chuàng)建了一塊共享內(nèi)存,要求把上面的數(shù)據(jù)放進(jìn)共享內(nèi)存中去
怎么放???

  1. shmt = (struct A *)shmat(key,0,0);
  2. memcyp(shmt,hh,sizeof(struct A) * 4);
  3. 是這么放的嗎???
復(fù)制代碼

可是這樣做了之后,只是放入了一個(gè)struct B *ok的指針,并沒有放入 所指的數(shù)據(jù)

我該怎么做才能把struct B *ok所指的數(shù)據(jù)也放進(jìn)去呢??
請大家?guī)臀铱纯?br /> 謝謝了

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2005-12-13 13:56 |只看該作者
the 2nd argument of shmget() :          (sizeof(struct A) + sizeof(struct B) )* 4

這個(gè)問題與共享內(nèi)存沒關(guān)系,自己負(fù)責(zé)拷貝吧。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2005-12-13 14:50 |只看該作者
謝謝
只是不是我問的問題的答案呢

我的這個(gè)struct B *ok;結(jié)構(gòu)是想實(shí)現(xiàn)一個(gè)動態(tài)的數(shù)組
例如:hh[0].ok[1],hh[1].ok[3]等等
我現(xiàn)在用

  1. shmt = (struct A *)shmat(key,0,0);
  2. memcyp(shmt,hh,sizeof(struct A) * 4);
復(fù)制代碼

考進(jìn)數(shù)據(jù)后能訪問strcut A 中的
這幾個(gè)數(shù)據(jù)項(xiàng)
    int a;
    int b;
    char x[32];

但是不能通過ok指針訪問
struct B中的數(shù)據(jù)項(xiàng)

我想了一下,是因?yàn)樵趕truct A中 ok為struct B型的指針
所以考數(shù)據(jù)的時(shí)候只是考了這個(gè)指針,并沒有考它所指向的那塊數(shù)據(jù)

我想知道的是怎么把它所指向的那塊數(shù)據(jù)也考進(jìn)共享內(nèi)存,訪問的時(shí)候怎么訪問呢?
謝謝

論壇徽章:
1
榮譽(yù)版主
日期:2011-11-23 16:44:17
4 [報(bào)告]
發(fā)表于 2005-12-13 14:55 |只看該作者
把struct A ,struct B數(shù)據(jù)都copy進(jìn)去.然后讓ok指向struct B

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2005-12-13 15:01 |只看該作者
同意

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2005-12-13 15:01 |只看該作者
如果都有好幾個(gè)struct A和struct B,在內(nèi)存中都連續(xù)分布的,那么怎么確定位置呢
究竟哪個(gè)B是屬于哪個(gè)A的呢

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2005-12-13 15:15 |只看該作者
這個(gè)是不現(xiàn)實(shí)的,你要創(chuàng)建shm,必須指定大小──當(dāng)然,你也可以指定一個(gè)比需求大很多的size,以便動態(tài)分配。 但是, 想在shm中實(shí)現(xiàn)象C++ vector那樣的東西,我覺得不太現(xiàn)實(shí)。

要不然就首先設(shè)定一個(gè)最大值, 按照這個(gè)標(biāo)準(zhǔn)來shmget。然后,拷貝就是了?(btw: 如果memcpy不會的話就不要問我了^_^)

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2005-12-13 15:56 |只看該作者
原帖由 mq110 于 2005-12-13 14:55 發(fā)表
把struct A ,struct B數(shù)據(jù)都copy進(jìn)去.然后讓ok指向struct B

共享內(nèi)存里面用指針,每次shmat的掛接點(diǎn)都不一樣,感覺沒意義哦,

論壇徽章:
1
榮譽(yù)版主
日期:2011-11-23 16:44:17
9 [報(bào)告]
發(fā)表于 2005-12-13 19:06 |只看該作者
原帖由 musg2000 于 2005-12-13 15:56 發(fā)表

共享內(nèi)存里面用指針,每次shmat的掛接點(diǎn)都不一樣,感覺沒意義哦,


可能他就有這樣的需求吧.
如果我可能換一種方式. 消息隊(duì)列.或其他.

論壇徽章:
1
榮譽(yù)版主
日期:2011-11-23 16:44:17
10 [報(bào)告]
發(fā)表于 2005-12-13 19:10 |只看該作者
另外.如果共享內(nèi)存只是 簡單的copy一個(gè)指針過去.就可以隨意訪問的話,豈不是失去了保護(hù)性?
進(jìn)程的地址空間隨便就可以被其他進(jìn)程訪問.
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP