Два других ответа сказали вам, что не так, но я хочу дать вам исполняемый код.Вы можете изменить его так, чтобы он передавал что угодно, принцип заключается в том, что вам нужно сохранить длину каждого элемента, который вы передали на другую сторону.
// write.c
#include <stdio.h>
#include <string.h>
#include <sys/shm.h>
#include <sys/stat.h>
int main ()
{
key_t shm_key = 6166529;
const int shm_size = 1024;
int shm_id;
char* shmaddr, *ptr;
int next[2];
printf ("writer started.\n");
/* Allocate a shared memory segment. */
shm_id = shmget (shm_key, shm_size, IPC_CREAT | S_IRUSR | S_IWUSR);
/* Attach the shared memory segment. */
shmaddr = (char*) shmat (shm_id, 0, 0);
printf ("shared memory attached at address %p\n", shmaddr);
/* Start to write data. */
ptr = shmaddr + sizeof (next);
next[0] = sprintf (ptr, "mandy") + 1;
ptr += next[0];
next[1] = sprintf (ptr, "73453916") + 1;
ptr += next[1];
sprintf (ptr, "amarica");
memcpy(shmaddr, &next, sizeof (next));
printf ("writer ended.\n");
/*calling the other process*/
system("./read");
/* Detach the shared memory segment. */
shmdt (shmaddr);
/* Deallocate the shared memory segment.*/
shmctl (shm_id, IPC_RMID, 0);
return 0;
}
// read.c
#include <stdio.h>
#include <sys/shm.h>
#include <sys/stat.h>
int main ()
{
key_t shm_key = 6166529;
const int shm_size = 1024;
int shm_id;
char* shmaddr, *ptr;
char* shared_memory[3];
int *p;
/* Allocate a shared memory segment. */
shm_id = shmget (shm_key, shm_size, IPC_CREAT | S_IRUSR | S_IWUSR);
/* Attach the shared memory segment. */
shmaddr = (char*) shmat (shm_id, 0, 0);
printf ("shared memory attached at address %p\n", shmaddr);
/* Start to read data. */
p = (int *)shmaddr;
ptr = shmaddr + sizeof (int) * 2;
shared_memory[0] = ptr;
ptr += *p++;
shared_memory[1] = ptr;
ptr += *p;
shared_memory[2] = ptr;
printf ("0=%s\n", shared_memory[0]);
printf ("1=%s\n", shared_memory[1]);
printf ("2=%s\n", shared_memory[2]);
/* Detach the shared memory segment. */
shmdt (shmaddr);
return 0;
}
// Результат выполнения:
> [lex:shm]$ ./write
> writer started.
> shared memory attached at address 0x7fa20103b000
> writer ended.
> shared memory attached at address0x7fd85e2eb000
> 0=mandy
> 1=73453916
> 2=amarica