⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmap_anon.c

📁 coreavc for linux in unix_linux
💻 C
字号:
 /** * \file mmap_anon.c * \brief Provide a compatible anonymous space mapping function */#include "config.h"#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <sys/mman.h>#if defined(MAP_ANON) && !defined(MAP_ANONYMOUS)#define MAP_ANONYMOUS MAP_ANON#endif/* * mmap() anonymous space, depending on the system's mmap() style. On systems * that use the /dev/zero mapping idiom, zerofd will be set to the file descriptor * of the opened /dev/zero.  */  /** * \brief mmap() anonymous space, depending on the system's mmap() style. On systems * that use the /dev/zero mapping idiom, zerofd will be set to the file descriptor * of the opened /dev/zero. * * \param addr address to map at. * \param len number of bytes from addr to be mapped. * \param prot protections (region accessibility). * \param flags specifies the type of the mapped object. * \param offset start mapping at byte offset. * \param zerofd  * \return a pointer to the mapped region upon successful completion, -1 otherwise. */void *mmap_anon(void *addr, size_t len, int prot, int flags, off_t offset){    void *result;     /* From loader/ext.c:      * "Linux EINVAL's on us if we don't pass MAP_PRIVATE to an anon mmap"      * Therefore we preserve the same behavior on all platforms, ie. no      * shared mappings of anon space (if the concepts are supported). */#if defined(MAP_SHARED) && defined(MAP_PRIVATE)     flags = (flags & ~MAP_SHARED) | MAP_PRIVATE;#endif /* defined(MAP_SHARED) && defined(MAP_PRIVATE) */#ifdef MAP_ANONYMOUS    /* BSD-style anonymous mapping */    result = mmap(addr, len, prot, flags | MAP_ANONYMOUS, -1, offset);#else    /* SysV-style anonymous mapping */    fd = open("/dev/zero", O_RDWR);    if(fd < 0){        perror( "Cannot open /dev/zero for READ+WRITE. Check permissions! error: ");        return NULL;    }    result = mmap(addr, len, prot, flags, fd, offset);    close(fd);#endif /* MAP_ANONYMOUS */    return result;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -