Ios 在内存映射文件之后读取它';关门了

Ios 在内存映射文件之后读取它';关门了,ios,linux,unix,operating-system,mmap,Ios,Linux,Unix,Operating System,Mmap,mmap手册页表示关闭文件不会导致页面取消映射。但是,我想知道以下顺序是否有效,即在读取发生时,页面可能没有被错误地放入内存。换句话说,文件在关闭后是否仍处于打开状态?安卓和iOS上是否都会出现这种行为 void func() { auto fd = open("test.txt", O_RDONLY); void *ptr = mmap(nullptr, 16384, PROT_READ, MAP_PRIVATE, fd, 0); close(fd

mmap
手册页表示关闭文件不会导致页面取消映射。但是,我想知道以下顺序是否有效,即在读取发生时,页面可能没有被错误地放入内存。换句话说,文件在
关闭后是否仍处于打开状态?安卓和iOS上是否都会出现这种行为

void func()
{
   auto fd    = open("test.txt", O_RDONLY);
   void *ptr  = mmap(nullptr, 16384, PROT_READ, MAP_PRIVATE, fd, 0);
   close(fd);
   uint8_t *p = (uint8_t *)ptr;
   // Read from *p 
}

你应该尝试一下,如果它有效的话,就发布一个更新。从理论上讲,这根本不应该起作用。它起作用了,因此我的问题是,如果人们总是期望它起作用的话,它是否有趣。好奇地想知道答案这能回答你的问题吗?看起来mmap向文件添加了自己的引用,因此关闭了
fd
,但mmap的内部引用仍然打开,这就是它工作的原因。