gpt4 book ai didi

linux - 带有 mmap(MAP_FIXED) 的程序在 Linux 2.6.18 && glibc 2.5 上崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:11:17 26 4
gpt4 key购买 nike

以下程序:

#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 mmapMAP_FIXED 的支持是实现定义的,不鼓励支持。我自己从未使用过它,所以除了省略它之外我想不出任何解决方案。

关于linux - 带有 mmap(MAP_FIXED) 的程序在 Linux 2.6.18 && glibc 2.5 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12748202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com