Cần sử dụng IPC để chuyển số lượng lớn dữ liệu (200kb +) từ tiến trình con sang cha mẹ trên OS X 10.4 trở lên, tôi đọc trên bộ nhớ dùng chung trên Unix, cụ thể là cơ chế bộ nhớ chia sẻ System V và POSIX. Sau đó, tôi nhận ra rằng mmap() có thể được sử dụng với các cờ MAP_ANON và MAP_SHARED để làm một điều tương tự (hoặc chỉ với cờ MAP_SHARED, nếu tôi không nhớ một tập tin thường xuyên được tạo ra).Tại sao sử dụng bộ nhớ chia sẻ SysV hoặc POSIX so với mmap()?
Câu hỏi của tôi là, có bất kỳ lý do nào không chỉ sử dụng mmap() không? Nó có vẻ đơn giản hơn nhiều, bộ nhớ vẫn được chia sẻ, và nó không phải tạo một tập tin thực nếu tôi sử dụng MAP_ANON. Tôi có thể tạo các tập tin trong quá trình cha mẹ sau đó fork() và exec() đứa trẻ và sử dụng nó trong quá trình con.
Phần thứ hai của câu hỏi là, lý do nào khiến phương pháp này không đủ, và ai sẽ phải sử dụng cơ chế bộ nhớ chia sẻ SysV hoặc POSIX? Lưu ý rằng tôi đã lên kế hoạch thực hiện đồng bộ bằng cách sử dụng các đường ống mà tôi cần cho giao tiếp khác, tức là cha mẹ yêu cầu dữ liệu qua đường ống, đứa trẻ viết nó vào bộ nhớ dùng chung và phản hồi trên đường ống sẵn sàng. Không có nhiều độc giả hoặc nhà văn tham gia. Tính di động không phải là ưu tiên.
Bạn không thể sử dụng posix_shm mà không có mmap, phần đó là vô nghĩa. Mặc dù vậy, bạn đã đúng trong đoạn đầu tiên, posix_shm cho phép mmap khi bạn không có mối quan hệ cha/con. –