ฉันมีปัญหาเล็กน้อยกับหนึ่งในโครงการของฉัน
ฉันพยายามค้นหาตัวอย่างที่มีการบันทึกไว้เป็นอย่างดีเกี่ยวกับการใช้หน่วยความจำที่ใช้ร่วมกันfork()
แต่ไม่ประสบความสำเร็จ
โดยทั่วไปสถานการณ์คือเมื่อผู้ใช้เริ่มโปรแกรมฉันจำเป็นต้องเก็บค่าสองค่าในหน่วยความจำที่ใช้ร่วมกัน: current_pathซึ่งเป็นถ่าน *และfile_nameซึ่งเป็นchar *ด้วย
ขึ้นอยู่กับอาร์กิวเมนต์ของคำสั่งกระบวนการใหม่จะเริ่มต้นด้วยfork()
และกระบวนการนั้นจำเป็นต้องอ่านและแก้ไขตัวแปรcurrent_path ที่จัดเก็บในหน่วยความจำแบบแบ่งใช้ในขณะที่ตัวแปรfile_nameอ่านได้อย่างเดียว
มีคำแนะนำที่ดีเกี่ยวกับหน่วยความจำที่ใช้ร่วมกันพร้อมรหัสตัวอย่าง (ถ้าเป็นไปได้) ที่คุณสามารถแนะนำฉันได้ไหม
shmget()
และอื่น ๆ และmmap()
แนวทางที่บริสุทธิ์ด้วยMAP_ANON
(aka MAP_ANONYMOUS
) - แม้ว่าMAP_ANON
POSIX จะไม่ได้กำหนดไว้ก็ตาม นอกจากนี้ยังมี POSIX shm_open()
และshm_close()
สำหรับการจัดการอ็อบเจ็กต์หน่วยความจำแบบแบ่งใช้ […ต่อ…]
shm_unlink()
) ในขณะที่กลไกที่ใช้mmap()
ต้องใช้ไฟล์และMAP_SHARED
เพื่อคงอยู่ ข้อมูล (และMAP_ANON
ป้องกันการคงอยู่) มีตัวอย่างที่สมบูรณ์ในส่วนเหตุผลของข้อกำหนดของshm_open()
.