C语言地址内存处理相关 API

内存地址的处理操作

memchr 函数

函数原型 :
void *memchr(const void *str, int c, size_t n)
描述 :
        在参数 str 所指向的内存的前 n 个字节中搜索第一次出现值 c (值 c str[] 相同类型)的位置。
返回值 :
        该函数返回一个指向匹配字节的指针,如果在给定的内存区域未出现字符,则返回NULL。
备注
        无

memcmp 函数

函数原型 :
int memcmp(const void *str1, const void *str2, size_t n)
描述 :
        把 str1 str2 的前 n 个字节进行比较。
返回值 :
        如果返回值 < 0 ,则表示 str1 小于 str2
        如果返回值 > 0 ,则表示 str1 大于 str2
        如果返回值 = 0 ,则表示 str1 等于 str2
备注
        无

memcpy 函数

函数原型 :
void *memcpy(void *dest, const void *src, size_t n)
描述 :
        从 src 复制 n 个字节到 dest
返回值 :
        该函数返回一个指向目标存储区 str1 的指针。
备注
        无

memmove 函数

函数原型 :
void *memmove(void *dest, const void *src, size_t n)
描述 :
        另一个用于从 src 复制 n 个字符到 dest 的函数。
返回值 :
        该函数返回一个指向目标存储区 str1 的指针。
备注
        在重叠内存块这方面,memmove() 是比 memcpy() 更安全的方法。如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。如果目标区域与源区域没有重叠,则和 memcpy() 函数功能相同。

memset 函数

函数原型 :
void *memset(void *str, int c, size_t n)
描述 :
        复制 c 到参数 str 所指向的内存的前 n 个字节。
返回值 :
        该值返回一个指向存储区 str 的指针。
备注
        常用于清空内存区的操作

bzero 函数

函数原型 :
void bzero(void *s, size_t n);
描述 :
        将 s 的前 n 个字节置零
返回值 :
        无
备注
        不支持的所有系统, 移植性不强,建议使用 memset 代替

获取内存分页大小函数 getpagesize

头文件
#include <unistd.h>
函数原型 :
size_t getpagesize(void);
描述 :
        返回内存页的大小
返回值 :
        返回内存页的大小
备注
        无

内存映射函数 mmap

头文件
#include <sys/mman.h>
函数原型 :
void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);
描述 :
        因为文件的读写操作没有内存的读写操作来的方便,所以 mmap() 用来将某个文件内容映射到内存中, 对该内存区域的存取即是直接对该文件内容的读写
参数描述
         addr : 指向欲对应的内存起始地址,通常设为 NULL ,代表让系统自动选定地址,对应成功后该地址会返回
         length: 映射的内存字节大小
         port: 代表映射区域的保护方式,有下列组合:
                PROT_EXEC 映射区域可被执行。
                PROT_READ 映射区域可被读取。
                PROT_WRITE 映射区域可被写入。
                PROT_NONE 映射区域不能存取。
         flags: 设置映射区域的特性:
                MAP_FIXED 如果参数 addr 所指的地址无法成功建立映射时 , 则放弃映射,不对地址做修正。通常不建议设置
                MAP_SHARED 对应射区域的写入数据会复制回文件内,而且允许其他映射该文件的进程共享, 建议设置
                MAP_PRIVATE 对映射区域的写入操作会产生一个映射文件的复制,即私人的" 写入时复制" (copy on write) 对此区域作的任何修改都不会写回原来的文件内容。
                MAP_ANONYMOUS 建立匿名映射, 此时会忽略参数 fd, 不涉及文件 , 而且映射区域无法和其他进程共享。
                MAP_DENYWRITE 只允许对应射区域的写入操作,其他对文件直接写入的操作将会被拒绝。
                MAP_LOCKED 将映射区域锁定住,这表示该区域不会被置换(swap)
        fd: 文件描述符
        offset: 文件映射的偏移量,通常设置为 0 ,代表从文件最前方开始对应, offset 必须是分页大小的整数倍
返回值 :
        若映射成功则返回映射区的内存起始地址,否则返回 MAP_FAILED(-1) ,错误原因存于errno 中
备注
        无

解除映射函数 munmap

头文件
#include <sys/mman.h>
函数原型 :
int munmap(void *addr, size_t length);
描述 :
        解除 addr 内存的映射关系
参数说明
        addr:映射内存的地址
        length: 映射区字节大小
返回值 :
        如果解除映射成功则返回 0 ,否则返回- 1
备注
        无

回写磁盘函数 msync

头文件
#include <sys/mman.h>
函数原型 :
int msync(void *addr, size_t length, int flags);
描述 :
        进程在映射空间的对共享内容的改变并不直接写回到磁盘文件中,往往在调用 munmap () 后才执行该操作,可以通过调用 msync() 函数来实现磁盘文件内容与共享内存区中的内容一致, 即同步操作 .
参数说明:
        addr:文件映射到进程空间的地址
        len:映射空间的大小
        flags:刷新的参数设置,可以取值 MS_ASYNC/ MS_SYNC/ MS_INVALIDATE
                MS_ASYNC ( 异步 ): 调用会立即返回,不等到更新的完成
                MS_SYNC(同步) 调用会等到更新完成之后返回
                MS_INVALIDATE ( 通知使用该共享区域的进程,数据已经改变 ): 在共享内容更改之后,使得文件的其他映射失效,从而使得共享该文件的其他进程去重新获取最新值
返回值 :
        成功则返回 0 ,否则返回- 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九月丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值