Note that there are some explanatory texts on larger screens.

plurals
  1. POPassing data structure to another process using shared memory and saving to file
    primarykey
    data
    text
    <p>I am sending data(name, ph number &amp; address) to another process using shared memory. I have to print data in the second process and store them to a file. I have tried this code but I am not receiving data in second process. Can someone help me with this. Thank you.</p> <pre><code>address.c typedef struct { char lname[25]; char fname[20]; char address[20]; char phonenumber[20]; }addressbook; addressbook a; char *shared_memory; int main() { int select; int segment_id; char* shared_memory; int segment_size; key_t shm_key; const int shared_segment_size = 0x6500; shm_key = ftok("/home/madan/programs/shm_tok",'C'); if(shm_key &lt; 0) { printf("failed to create the key %s\n",strerror(errno)); } /* Allocate a shared memory segment. */ segment_id = shmget (shm_key, shared_segment_size, IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR); if(segment_id &lt; 0) { printf("error geting the segment id %s\n",strerror(errno)); } printf("segment ID:%d\n", segment_id); /* Attach the shared memory segment. */ shared_memory = (char*) shmat (segment_id, 0, 0); printf ("shared memory attached at address %p\n", shared_memory); printf("enter lastname:\n"); gets(a.lname); printf("enter firstname:\n"); gets(a.fname); printf("enter address:\n"); gets(a.address); printf("enter phone number:\n"); gets(a.phonenumber); memcpy(shared_memory, &amp;a, sizeof(a)); printf("data:%s\n", shared_memory); system("./address-insert"); /* Detach the shared memory segment. */ shmdt (shared_memory); / * Deallocate the shared memory segment.*/ shmctl (segment_id, IPC_RMID, 0); } </code></pre> <hr> <pre><code>address-insert.c typedef struct { char lname[20]; char fname[20]; char address[20]; char phonenumber[20]; }addressbook; addressbook a; int main () { int segment_id; char* shared_memory; FILE *fp; char *name; int segment_size; key_t shm_key; shm_key = ftok("/home/madan/programs/shm_tok",'D'); const int shared_segment_size = 0x6500; /* Allocate a shared memory segment. */ segment_id = shmget (shm_key, shared_segment_size, S_IRUSR | S_IWUSR); if(segment_id &lt; 0) { printf("error:[%s]",strerror(errno)); } printf("segment id %d\n",segment_id); /* Attach the shared memory segment. */ shared_memory = (char*) shmat (segment_id, 0, 0); if(shared_memory == NULL) { printf("failed to attach the shared memory %s",strerror(errno)); } printf ("shared memory2 attached at address %p\n", shared_memory); printf ("name=%s\n", shared_memory); memcpy(&amp;a, shared_memory, sizeof(a)); printf("name: %s\n", a.fname); printf("address:%s\n", a.address); printf("phone number=%s\n", a.phonenumber); fp = fopen("filename","a+"); fwrite(a, 1, strlen(a),fp); fclose(fp); /* Detach the shared memory segment. */ shmdt (shared_memory); return 0; } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload