当前位置: 技术问答>linux和unix
求mremap用法
来源: 互联网 发布时间:2017-01-25
本文导语: #include #include #include #include #include #include int main(int argc, char **argv) { void *s,*x; x=malloc(8); s=(void *)mremap(x,8,8,0); return 0; } 为什么我的mremap函数总是返回-1呢? 看别人的示例代码和我的这个好...
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
void *s,*x;
x=malloc(8);
s=(void *)mremap(x,8,8,0);
return 0;
}
为什么我的mremap函数总是返回-1呢?
看别人的示例代码和我的这个好像差不多。。。
|
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
void *s,*x;
x=malloc(8);
s=(void *)mremap(x,8,8,0);
perror("mremap");
printf("old 0x%x new 0x%xn",x,s);
return 0;
}
结果是
mremap: Invalid argument
old 0x8ea3008 new 0xffffffff
查手册:
EINVAL An invalid argument was given. Possible causes are: old_address was
not page aligned; a value other than MREMAP_MAYMOVE or MREMAP_FIXED was
specified in flags; new_size was zero; new_size or new_address was
invalid; or the new address range specified by new_address and new_size
overlapped the old address range specified by old_address and old_size;
or MREMAP_FIXED was specified without also specifying MREMAP_MAYMOVE.
|
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
void *s,*x;
x=malloc(8192);
x = (unsigned int )x + 0x1000;
x = (unsigned int )x & 0xfffff000;
s=(void *)mremap(x,4000,8,0);
perror("mremap");
printf("old 0x%x new 0x%xn",x,s);
return 0;
}
我这样改一下,就可以用了。
mremap: Success
old 0x8e3d000 new 0x8e3d000
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。