システムコール 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しなくていいか