Мне нужна помощь с этим кодом.сегмент разделяемой памяти shmget shmat двойной доступ и
Я создал в общем сегменте struct msg_t
, а в другом сегменте я создал простой string
. В этом методе сначала я прикрепляю оба сегмента, а затем хочу инициализировать строку. , то я пытаюсь записать в поле своего struct msg_t
(в моем первом сегменте) указатель на эту строку (выделенную во втором сегменте). Я сделал много тестов, но кажется, что когда я пытаюсь распечатать содержимое этого поля, получающего доступ с первого сегмента, он печатает «».
Как это сделать? Спасибо за помощь.
msg_t* msg_init_string(void* content) {
//viene creata una copia "privata" della stringa
msg_t* new_msg;
int new_msg_id;
int content_id;
char* string = (char*) content;
if ((new_msg_id = shmget(ftok(FILENAME2,'N'),sizeof(msg_t),IPC_CREAT|0666)) == -1) {
perror("shmget() for array_msg");
exit(-1);
}
if ((content_id = shmget(ftok(FILENAME2,'C'),(strlen(string) + 1),IPC_CREAT|0666)) == -1) {
perror("shmget() for array_msg");
exit(-1);
}
new_msg = (msg_t*)shmat(new_msg_id, NULL,0);
char* new_content =(char*)shmat(content_id,NULL,0);// +1 per \0 finale
strcpy(new_content, string);
printf("here \n %s",(char*)(new_content));
//here it seems not working..because then, it can not print anything!!
new_msg->content =new_content;
printf("here \n %s",(char*)(new_msg->content));
return new_msg;
моих простой struct msg_t
является:
typedef struct msg {
void* content; // generico contenuto del messaggio
struct msg * (*msg_init)(void*); // creazione msg
void (*msg_destroy)(struct msg *); // deallocazione msg
struct msg * (*msg_copy)(struct msg *); // creazione/copia msg
} msg_t;
что это значит ??? – user244050
Всегда старайтесь публиковать компилируемую исполняемую программу, а не фрагменты, которые нужно закончить вручную и собрать. –