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