Tôi đang sử dụng shmget để chia sẻ dữ liệu giữa các quy trình của dự án của tôi trên Linux.Các giá trị an toàn được sử dụng làm khóa trong shmget
int shmget(key_t key, size_t size, int shmflg);
Tuy nhiên, bất kỳ chương trình khác có thể gọi để shmget quá, và do đó nó có thể dẫn đến xung đột quan trọng (vì tôi sử dụng một hằng số là chìa khóa để gọi shmget, tôi phải sử dụng một hằng số thay vì một chìa khóa được tạo ra vì các quy trình bên được xây dựng và chạy riêng).
Giá trị an toàn nào sẽ được sử dụng làm khóa trong chế độ shmget?
Tôi đang nghĩ đến việc tạo các khóa ngẫu nhiên và lặp lại việc tạo phân đoạn shm với cờ IPC_EXCL cho đến khi một khóa có thể chấp nhận được tìm thấy, nhưng tôi không biết đó có phải là tùy chọn hay không – jondinham
@PaulDinh: vâng, đó là một lựa chọn tốt. Vâng, nhưng bạn phải có một cách để tạo ra các khóa ngẫu nhiên, mà không dựa vào 'sizeof (key_t)' cụ thể; Tôi chỉ muốn sử dụng ngẫu nhiên 'id' cho ftok() sau đó. –
Trong trường hợp bạn có một kịch bản client-server trong đó mỗi máy khách duy trì một phân đoạn bộ nhớ chia sẻ cho IPC hiệu quả với máy chủ, một tùy chọn tốt cho các khóa 'shmget()' duy nhất là dựa vào lệnh gọi hệ thống 'gettid()' , trả về ID luồng của người gọi. Tuy nhiên, đây là đặc trưng của Linux. –