मैं दो प्रक्रियाओं के बीच संवाद करने की कोशिश कर रहा हूं। मैं एक प्रक्रिया में साझा स्मृति में डेटा (जैसे नाम, फोन नंबर, पता) को सहेजने की कोशिश कर रहा हूं और अन्य प्रक्रिया के माध्यम से उस डेटा को मुद्रित करने का प्रयास कर रहा हूं।दो प्रक्रियाओं के बीच संवाद करने के लिए साझा स्मृति का उपयोग कैसे करें
process1.c
#include <stdio.h>
#include <sys/shm.h>
#include <sys/stat.h>
int main()
{
int segment_id;
char* shared_memory[3];
int segment_size;
key_t shm_key;
int i=0;
const int shared_segment_size = 0x6400;
/* Allocate a shared memory segment. */
segment_id = shmget (shm_key, shared_segment_size,
IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR);
/* Attach the shared memory segment. */
shared_memory[3] = (char*) shmat (segment_id, 0, 0);
printf ("shared memory attached at address %p\n", shared_memory);
/* Write a string to the shared memory segment. */
sprintf(shared_memory[i], "maddy \n");
sprintf(shared_memory[i+1], "73453916\n");
sprintf(shared_memory[i+2], "america\n");
/*calling the other process*/
system("./process2");
/* Detach the shared memory segment. */
shmdt (shared_memory);
/* Deallocate the shared memory segment.*/
shmctl (segment_id, IPC_RMID, 0);
return 0;
}
process2.c
#include <stdio.h>
#include <sys/shm.h>
#include <sys/stat.h>
int main()
{
int segment_id;
char* shared_memory[3];
int segment_size;
int i=0;
key_t shm_key;
const int shared_segment_size = 0x6400;
/* Allocate a shared memory segment. */
segment_id = shmget (shm_key, shared_segment_size,
S_IRUSR | S_IWUSR);
/* Attach the shared memory segment. */
shared_memory[3] = (char*) shmat (segment_id, 0, 0);
printf ("shared memory22 attached at address %p\n", shared_memory);
printf ("name=%s\n", shared_memory[i]);
printf ("%s\n", shared_memory[i+1]);
printf ("%s\n", shared_memory[i+2]);
/* Detach the shared memory segment. */
shmdt (shared_memory);
return 0;
}
लेकिन मैं वांछित आउटपुट नहीं मिल रहा है। उत्पादन जो मुझे मिल गया है:
shared memory attached at address 0x7fff0fd2d460
Segmentation fault
किसी को भी मुझे इस के साथ मदद कृपया कर सकते हैं। क्या यह shared_memory[3]
आरंभ करने का सही तरीका है।
धन्यवाद।
धन्यवाद हेनिंग। – maddy