c - 为什么 mmap 在这里不起作用

标签 c linux memory-management x86-64 mmap

当我运行以下代码时出现段错误...

int * x = mmap( 0, 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE, 0, 0 );

x[0] = 42; // <--- Segmentation fault happens due to this

这里有什么问题吗?

最佳答案

您指定了不正确的标志和文件描述符。看起来您想要的是匿名(不受文件支持)映射。如果是这样的话,正确的调用应该是:

x = mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);

您需要使用 MAP_ANONYMOUS 标志来告诉 Linux 没有文件。您应该为文件描述符传递 -1,而不是 0。

关于c - 为什么 mmap 在这里不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8475165/

相关文章:

c - 是否有 Linux C API 调用来查询挂载的文件系统以查看它是否是只读的?

java - 如何在 Java 进程 Hits OutOfMemory Error 时自动创建 Heap Dump?

linux - Perl 脚本,如何从 .bash_profile 获取环境变量

c - 通过引用传递结构? [C]

c++ - C中自增/自减运算符的必要性

Java反射和OOM错误

c++ - 为什么写入 42 路缓冲区比写入零缓冲区快?

c - 结构指针成员和内存管理

c - srand()——为什么只调用一次?

c - C中将中缀表达式转换为后缀(RPN)的最短方法