GNU/Linux >> Znalost Linux >  >> Linux

Proč používat shm_open?

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.


Linux
  1. Proč používat Install Rather than Cp And Mkdir?

  2. Jak používat typ souboru ve Vimu?

  3. Je možné použít / v názvu souboru?

  1. Proč je Windows10 VM pomalý na OpenStack?

  2. Proč rsync nepoužívá delta-transfer pro místní soubory?

  3. Proč Linux používá odkládací oddíl místo souboru?

  1. Proč používáme „./“ (lomítko) ke spuštění souboru v Linuxu/unixu?

  2. Linux – proč používáme Su – a nejen Su?

  3. Proč nemohu použít CD ve skriptu Bash?