- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
以下程序:
#include <stdio.h>
#include <assert.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
void generate_test_file(int count)
{
FILE *f;
int i;
f = fopen("testfile", "w+");
for (i=0;i<count;i++) {
fwrite(&i, 1, sizeof(i), f);
}
fclose(f);
}
void test_mmap_directly()
{
int fd;
void *area_short, *area_long;
generate_test_file(1024);
fd = open("testfile", O_RDONLY);
assert(fd>=0);
area_short = mmap(0, 4096, PROT_READ, MAP_PRIVATE, fd, 0);
assert(area_short != MAP_FAILED);
generate_test_file(1024*1024);
area_long = mmap(area_short, 4096*1024, PROT_READ, MAP_PRIVATE | MAP_FIXED, fd, 0);
assert(area_long != MAP_FAILED);
assert(area_short == area_long);
}
int main(int argc, char ** argv)
{
test_mmap_directly();
/* Crashes on shutdown for libc 2.5 and kernel 2.6.18 (CentOS 5) */
}
在我的 CentOS 5 机器上因段错误而关机时崩溃。这是一个已知的错误,通常应该不使用 MAP_FIXED 还是有什么问题程序。它也会在其他平台上崩溃吗?
感谢您的帮助,
最佳答案
您是否忘记在指针上使用 munmap
并在文件描述符上使用 close
。如果没有,那么问题很可能是 MAP_FIXED
我在我的 debian(内核 2.6.32)上进行了测试,它在使用 MAP_FIXED 标志时导致了 SEGFAULT,并且在没有该标志的情况下工作(除了第二个 mmap 失败后的断言,我认为这并不意外)。
根据man mmap
对 MAP_FIXED
的支持是实现定义的,不鼓励支持。我自己从未使用过它,所以除了省略它之外我想不出任何解决方案。
关于linux - 带有 mmap(MAP_FIXED) 的程序在 Linux 2.6.18 && glibc 2.5 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12748202/
我一直在查看 mmap 函数的不同标志,即 MAP_FIXED、MAP_SHARED、MAP_PRIVATE。有人可以向我解释 MAP_FIXED 的用途吗?无法保证首先会使用地址空间。 最佳答案 M
我正在用堆栈运行一些实验,但以下让我卡住了。 可以看出Linux有初始[stack]映射132KiB大小。在 ulimit -s unlimited 的情况下,如果我们相应地调整 rsp,我们可以进一
由于一些与这个问题无关的模糊原因,我需要求助于使用 MAP_FIXED 以获得接近 libc 的文本部分在内存中的位置的页面。 在阅读 mmap(2)(我一开始就应该这样做)之前,如果我使用 MAP_
常量 MAP_FIXED 对 mmap 有什么作用? 我已经在手册中阅读了它,但仍然不明白它的用途以及它适用于哪些情况。 最佳答案 MAP_FIXED 指定 mmap 内存应该位于作为第一个参数传递给
我有一个简单的 mmap 程序,它在两台 linux 机器上的行为不同: cat a.c #include #include #include #include
:) 我正在尝试将一些遗留代码(大型程序)移植到 CentOS 7,但遇到了障碍。代码的核心是一个相当笨拙的结构,围绕使用 mmap 分配硬编码地址并将文件映射到它而构建。该文件就像一个数据库(由一个
在尝试测试时 Is it allowed to access memory that spans the zero boundary in x86?在 Linux 的用户空间中,我编写了一个 32 位
以下程序: #include #include #include #include #include #include void generate_test_file(int count)
我是一名优秀的程序员,十分优秀!