2016-04-05 8 views
0

共有メモリを介して構造体を送信できますが、myStructure [SIZE]を送信したい場合はどうすればいいですか?Cでmmapのベクトルを共有

私はこれを整数のベクトルで試しています。私のような何かを行う場合は今

int fd, data_size = VECSIZE*sizeof(int), i, numbers[VECSIZE]; 
int *number; 

fd = shm_open("/ex02_1100620", O_CREAT | O_EXCL | O_RDWR, S_IRUSR | S_IWUSR); 

ftruncate(fd, data_size); 

number = numbers; 

srand((unsigned) time(NULL)); 
for(i = 0; i < SIZE; i++){ 
    number[i] = rand()% SIZE + 1; 
} 

number = (int *)mmap(NULL, data_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); 

number = numbers 

をして、それが動作number[SIZE]位置を印刷するが、私はmmapの後number[SIZE]を印刷する場合、それはすべて0を印刷し、私の問題は、ここでは作家で開始します読者も同じことをしています。

私はそれをしますが、私の問題を説明するためにエラーをキャッチすることは本当に必要ではないと思います。

私はこの投稿を読んでいますSharing an array of structs using mmapしかし、私が間違っていることを理解できませんでした。

コードに関する詳細情報が必要な場合は、それだけです。

+0

あの、ここで筆者はには何も書いていません共有メモリ? – immibis

+0

それは私が問題を抱えているところです。私は数字を使い、数字を忘れるべきですか? これは、number = numbersの代わりにmallocを使用するべきではない場合ですか?そして、それはmmap呼び出しでどのように動作するでしょうか? – AimForNuts

+0

共有メモリに何も書いていないのは、あなたがそれをするように言わなかったからです - あなたは 'numbers'を指すように' number'を設定し、 'number'を通して数の束を書きます'numbers'配列)、いくつかの共有メモリをマップし、共有メモリを指すように' number'を設定します。あなたは実際に共有メモリに書き込みませんでした。 – immibis

答えて

0

はのは、あなたのプログラムが何をするか確認してみましょう:

  • numbersと呼ばれるintの配列を割り当て/作成します。
  • numbernumbersに設定します。
  • numbersを指しているので、numberで数字の束を書きます。これはnumbersに直接書き込むのと同じです。
  • 一部の共有メモリをマップし、numberが共有メモリを指すように設定します。

    • いくつかの共有メモリをマップし、共有メモリを指すようにnumberを設定します。あなたが実際に何をしたいのか

    はこれです。

  • numberで数字の束を書く - 共有メモリを指しているので、これは共有メモリに直接書き込むのと同じです。

コードを修正するのに十分な情報です。

(共有メモリので、変数名を持っていない、あなたはそれに直接書き込むことはできません - 私たちは、ポインタを使用する理由です)

+0

はい、あります!答えをありがとう、私の愚かな間違いだった... そして、私はmallocについての2番目の質問は、いくつかの共有メモリを割り当てる必要があるので、愚かであることを今理解しています...それは本当に助けになりました。どうもありがとう。 – AimForNuts

+0

(私は「共有メモリをいくつか割り当てる」を「より共有メモリをマップする」に変更しましたが、Linux上で共有メモリがどのように動作するかは分かりません) – immibis

関連する問題