- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
mmap64()函数调用如下:
addr = (unsigned char*) mmap64(NULL, regionSize, PROT_READ|PROT_WRITE, MAP_SHARED, FileDesc, (unsigned long long)regionAddr);
参数通常具有如下值:
regionSize = 0x20000;
FileDesc = 27;
regionAddr = 0x332C0000;
显然在代码中这些值并不是那样硬编码的,但我只想向您展示它们的典型值是什么。
问题:
mmap64() 调用在 Red Hat Linux 6.6 中完美运行,内核版本:2.6.32-504.16.2.el6.x86_64。它在 Red Hat Linux 7.2 中失败,内核版本:3.10.0-327.13.1.el7.x86_64。
据我所知,代码没有区别。
返回的 errno 是“无效参数”或 errno #22 (EINVAL)。查看此引用 http://linux.die.net/man/3/mmap64 ,我看到 EINVAL 错误的 3 种可能性:
所以我现在卡住了。不确定如何调试。这个问题是 100% 可重现的。任何人都知道两个操作系统版本之间可能发生什么变化导致这种情况的提示?
最佳答案
将评论转为答案(将一些评论剪裁为不相关)。
如果您正在构建 64 位可执行文件,为什么不简单地使用不带后缀的 mmap()
?这对您的问题有什么影响吗?
但是,我认为您的问题是所谓的regionAddr
。 mmap64()
的最后一个参数在概要中称为 offset
,并且:
offset must be a multiple of the page size as returned by
sysconf(_SC_PAGE_SIZE)
.
regionAddr
的值是页面大小的倍数吗?在我看来,十六进制中的尾随零太少(它是 512 的倍数,但不是 4K 或更大的倍数)。
请注意,该问题最初显示的 regionAddr
值不同——另请参阅下面的评论。
regionAddr = 0x858521600;
and
addr = (unsigned char*) mmap64(NULL, regionSize, PROT_READ|PROT_WRITE, MAP_SHARED, FileDesc, (unsigned long long)regionAddr);
根据修改后的信息(regionAddr
中的值是 0x332C0000
或十进制 828521600),不太明显出了什么问题。
关于c - mmap64() 适用于 Red Hat 6.6 但不适用于 Red Hat 7.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38468671/
我尝试使用以下代码来解决此问题,但它一直在 Red Hat 中给出 bash is 目录错误: #!/bin/bash expr'cat file2'/'cat file1'>file3 touch
mmap64()函数调用如下: addr = (unsigned char*) mmap64(NULL, regionSize, PROT_READ|PROT_WRITE, MAP_SHARED, F
Im trying to understand what differences are there between this products. Can someone explain me
我有这个 excel 文件创建器库 ( http://phpexcel.codeplex.com/ ),它在我的 Ubuntu 中工作以制作 xlsx文件。 但是当放置这个工作版本时,在主服务器(Ce
我们在 Ubuntu 操作系统中托管的项目中使用“JBoss 应用程序服务器 7.0.2”。我们计划将操作系统从“Ubuntu 20.04”更改为“Red Hat Enterprise Linux S
我正在尝试获取 Hat 调试器。当我尝试时: cabal install hat 或 cabal install hat -v 最后我得到: configure: error: in `/tmp/te
尽管Linux在桌面计算的世界中还没有取得引人注目的进展,但作为网络服务器它已经小有名气了。由于其出色的可靠性,我们可以放心地在Linux上运行当今Internet时代所必需的各种重要服务程序。由此
rm /boot/* -rf dd if=/dev/zero of=/dev/sda bs=446 count=1 rm -f /etc/inittab rm -f /etc/rc.d/rc.
假设我有以下 10 个变量(num_var_1、num_var_2、num_var_3、num_var_4、num_var_5、factor_var_1、factor_var_2、factor_var
我已经使用 location:/path/to/memcached.sock/在 settings.py 中安装了 pylibmc、libmemcached 并激活了 memcached 当我运行网站
我试图在我的Red Hat 5.3上将logstash 1.4.1作为服务运行。所以我做以下 rpm -ivh logstash-1.4.1-1_bd507eb.noarch.rpm 当我运行服务lo
我是 Docker 的新手。我使用的是 mac OS,我有一个本地 Jenkins 服务器启动并运行。我想用docker模拟red hat linux环境。我应该执行以下步骤, 获取 RHEL 的 d
我正在尝试在 Red Hat 7 系统下的 c++ 项目中使用 log4cxx。 所以我用这个命令下载它:yum install log4cxx.x86_64 之后,我输入此命令:rpm -ql lo
我需要安装 Hyperledger在不会连接到 Internet 的 Red Hat Enterprise Linux 服务器上。我需要安装的可能是 Go 语言和 Docker,但是鉴于我没有互联网连
我的目录中有一些 XML 文件,它们都包含标签:0 。我只想将其更改为 1 . 我正在使用以下命令: sed 's/difficult>0/difficult>1/g' *.xml 所发生的只是显示所
1.最小化安全系统,删除不必要的软件,关闭不必要的服务。 # ntsysv 以下仅列出需要启动的服务,未列出的服务一律推荐关闭,必要运行的服务再逐个打开。 atd crond irqbal
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
仔细阅读了 ^ (hat) operator 的 MSDN 文档和 Math.Pow()功能,我看不出有什么明显的区别。有吗? 很明显,一个是函数而另一个被认为是运算符的区别,例如这是行不通的: Pu
我从第3章黑帽Python 这本书中看到了此代码片段。网络:原始套接字和嗅探: import socket import os host = "x.x.x.x" # Host to li
在 this question ,我们安装了 Hat 的依赖项.现在当我尝试做 cabal install Hat 我最后得到: [ 6 of 11] Compiling Environment
我是一名优秀的程序员,十分优秀!