文字列の配列をCの共有メモリに接続しようとしています。文字列の配列(配列1と配列2)を共有メモリに接続するために最善を尽くしました。
ここで、array1とarray2は、幅20文字とサイズ5の文字列の配列です(添付ファイルでそれを指定する方法も、私にはあまり明確ではありません)。また、aとbは、それぞれサイズ5の1-D整数配列とfloat配列です。
私が行っているように、実行時に値を更新することにより、文字列の配列の状態を変更したいと思います。
#include <stdio.h>
#include <stdlib.h>
#include<sys/shm.h>
#define NUMBER_OF_DATA 5
int main()
{
int size=(NUMBER_OF_DATA*(sizeof(int)+sizeof(float))) + (2*(20*NUMBER_OF_DATA));
key_t key;
key=ftok("/home/android/Desktop/newww.c",4);
int shmid=shmget(key,size,0777|IPC_CREAT);
int *a=(int *)shmat(shmid,0,0);
float *b=(float *)(a+NUMBER_OF_DATA);
char **array1=(char **)(b+NUMBER_OF_DATA);
char **array2=(char **)(array1+(20*NUMBER_OF_DATA));
int i;
for(i=0;i<5;i++)
{
printf("enter value\n");
scanf("%s",array1[i]);
}
shmdt(&shmid);
shmctl(shmid,IPC_RMID,0);
return 0;
}
私の他のプロセスは次のことを行います
int shmid=shmget(key,size,0777|IPC_CREAT);
int *a1=(int *)shmat(shmid,0,0);
float *b1=(float *)(a1+NUMBER_OF_DATA);
char **array11=(char **)(b1+NUMBER_OF_DATA);
char **array22=(char **)((char *)array11+(20*NUMBER_OF_DATA));
for(i=0;i<NUMBER_OF_DATA;i++)
{
a1[i]=aaa[i];
b1[i]=bbb[i];
array11[i]=array111[i];
array22[i]=array2222[i];
}
ここで、aaa、bbb、array111、およびarray222は、このプロセスによって値が共有メモリにロードされる他の配列です。これらの2つのプロセスは一緒になって、私が望んでいたことを達成するのに役立っていません。
誰かが理由を指摘し、文字列の配列をメモリにアタッチする正しい方法を教えてくれれば素晴らしいと思います。ありがとう。