当前位置:  技术问答>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.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3