要件に応じて、すべてのヘッダーが含まれています。以下のこのコードは機能していますが、問題はにありshmat(seg_id,NULL,0)
ます。NULL
2番目の引数は、オペレーティングシステムがユーザーに代わって場所を処理することを意味します。しかし、私たちは自分の記憶の場所を与えることができますが、どのように?わからない、助けてください。(OS - Ubuntu 11.04 ,Compiler gcc 4.5.2)
試してみman shmat
ましたが、完全には理解できませんでした
typedef struct {
int id;
} emp;
int main() {
emp *e;
int seg_id;
const int size=sizeof(emp);
seg_id=shmget( IPC_PRIVATE, size, S_IRUSR | S_IWUSR);
pid_t pid=fork();
if(pid<0) {
printf("Error");
return -1;
}
else if(pid == 0) {
e=(emp *)shmat(seg_id,NULL,0);
e->id=123;
shmdt(e);
}
else {
wait(NULL);
e=(emp *)shmat(seg_id,NULL,0);
printf("\nEmp Id : %d\n\n",e->id);
shmdt(e);
shmctl(seg_id, IPC_RMID, NULL);
}
return 0;
}
shmget()
4Kページアライメント用の独自のアドレスを取得するためにもこれを試しました
emp *e;
void **p;
posix_memalign(&p,4096,4096); // alignment as of pagesize 4K
e=p; // get the first address of the aligned memory
free(p); // free the allocated memory
次に、これをshmat(seg_id,e,0);
//eが必要なアドレスになると考えて使用しました。しかし、それはセグメンテーション違反を与えています
または、3番目の引数にも問題がありますか?どんな助けや提案も大歓迎です