Obě volání jsou v podstatě ekvivalentní na moderním Linuxu – 1. přístup lze použít pro přístup ke sdílené paměti POSIX z jazyků jako go (viz https://github.com/fabiokung/shm/blob/master/shm_linux.go), kde sdílená paměť POSIX není nativně k dispozici - může se to lišit u jiných OS/verzí, kde by 1. volání vedlo k vytvoření nějakého souboru nebo /dev/shm prostě není k dispozici a/nebo možná zpomalil výkon. Pravidla pro slučování cest se také mohou vyvíjet od verze k verzi librt
První přístup se nazývá rozhraní API pro soubory mapované v paměti (podporováno v std libs)
2. s názvem POSIX Shared memory API (vyžaduje librt aka libposix na Linuxu jako závislost Interně vytváří cestu a volá open)
Po přečtení zdroje shm_open
, mohu říci, že tyto dvě metody jsou téměř stejné.
odkaz:https://code.woboq.org/userspace/glibc/sysdeps/posix/shm_open.c.html
shm_open pouze přidá předponu shm_dir a poté vyvolá normální open
syscall, nic zvláštního.
Pokud otevřete a mmap() běžný soubor, data skončí v tomto souboru.
Pokud potřebujete pouze sdílet paměťovou oblast, aniž byste museli uchovávat data, což způsobuje další I/O režii, použijte shm_open().
Taková oblast paměti by vám také umožnila ukládat další druhy objektů, jako jsou mutexy nebo semafory, které na většině systémů nemůžete uložit do běžného souboru mmap()'ed.