Tôi có một struct:Làm thế nào để sửa đổi bộ nhớ chia sẻ (shmget/shmat) trong C?
struct sdata {
int x;
int y;
time_t time;
};
tôi có thể tạo bộ nhớ chia sẻ cho các cấu trúc như sau:
size_t shmsize = sizeof(struct sdata);
shmid = shmget(IPC_PRIVATE, shmsize, IPC_CREAT | 0666);
Sau đó, tôi truy cập vào bộ nhớ chia sẻ như thế này:
struct sdata *data = shmat(shared.shmid, (void *) 0, 0);
data->time = time(NULL); // function returns the current time
Câu hỏi của tôi là khá đơn giản. Đây có phải là cách đúng để truy cập/sửa đổi bộ nhớ dùng chung không? Đây có phải là cách tiếp cận tốt nhất không?
(Tôi đang sử dụng semaphores System V để đồng bộ hóa và tôi đã không bao gồm mã mà. Tôi chỉ muốn chắc chắn rằng tôi đang truy cập/sửa đổi các bộ nhớ chia sẻ một cách chính xác.)
Nếu quá trình khác là 'fork()' ed, thì không có vấn đề gì với IPC_PRIVATE, miễn là bộ nhớ dùng chung được tạo trước 'fork()'. Tuy nhiên, caveat là hợp lệ trong trường hợp tổng quát hơn. –