Tôi đang cố gắng liên lạc giữa hai quy trình. Tôi đang cố lưu dữ liệu (như tên, số điện thoại, địa chỉ) vào bộ nhớ dùng chung trong một quy trình và cố gắng in dữ liệu đó qua quá trình khác.cách sử dụng bộ nhớ dùng chung để liên lạc giữa hai quy trình
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;
}
Nhưng tôi không nhận được kết quả mong muốn. đầu ra mà tôi đã nhận là:
shared memory attached at address 0x7fff0fd2d460
Segmentation fault
Bất cứ ai cũng có thể vui lòng giúp tôi với điều này. Đây có phải là cách chính xác để khởi tạo shared_memory[3]
.
Cảm ơn bạn.
Cảm ơn bạn Henning. – maddy