揮発性のメモ2

最近知った知識を さも昔から知ってた風にメモ書きしていく

mmapしたあとはcloseしてよい

linuxjm.sourceforge.io

システムコール munmap() は指定されたアドレス範囲のマップを消去し、 これ以降のその範囲内へのメモリー参照は不正となる。この領域は、プロセスが終了したときにも自動的にアンマップされる。 一方、ファイルディスクリプターをクローズしても、この領域はアンマップされない。

https://linuxjm.sourceforge.io/html/LDP_man-pages/man2/mmap.2.html

mmapしている間はfd持ってなきゃだめ と長年思い込んでた

#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>

int main(){
    int fd = open("test.txt", O_RDWR | O_CREAT, 0666);
    ftruncate(fd, 100);
    char* addr = mmap(NULL, 100, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    close(fd); // mmap後は閉じていい

    for(int i = 0; i < 100; i++) addr[i] = 'A' + (i % 26);

    sleep(100);
    return 0;
}

でも多言語間の排他制御でflock頼ること多いし 別にいそいでcloseしなくていいか