1.内存管理
1.1 比较内存管理的相关函数
STL
new/delete
malloc()/free()
sbrk()/brk()
mmap()/munmap()
1.2 内存处理函数的介绍
(1) mmap函数
#include <sys/mman.h>
void *mmap(void* addr, size_t length, int prot, int flagsm, int fd , off_t offset)
第一个参数:映射的地址,给NULL即可,由内核指定
第二个参数:映射大小
第三个参数:映射权限(可进行按位或运算)
PROT_EXEC 可执行
PROT_READ 可读
PROT_WRITE 可写
PROT_NONE 不可访问
第四个参数:操作标志
MAP_SHARE 共享的
MAP_PRIVATE 私有的
MAP_ANONYMOUS 映射到物理内存
第五个参数:文件描述符,映射物理内存给0即可】
第六个参数:偏移量映射物理内存时给0即可
返回值:返回映射地址,失败返回(void*)-1
函数功能:主要用于建立文件/设备 到内存的映射
(2)munmap函数
Int munmap (void *addr, size_t length);
第一个参数:映射地址,mmap函数返回值
第二个参数:映射的大小
函数的功能:主要用于解除参数指定的映射
2.系统调用
3. 文件管理
3.1 文件的基本概念
在Unix/Linux系统中,几乎所有的一切都可以看作文件,因此,对文件的操作使用与各种输出设备
输入设备扥等,当然目录页可以看做文件
如;
dev/null 空设备
echo hello > /dev/null 表示丢弃处理结果
ciat /dev/null > a.txt 表示清空文件a.txt
3.2 文件相关读写函数
复习标C函数:
fopen()/fclose()/fread()/fwrite()/freek()
(1)open 函数
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char*pathname, int flags, mode_t mode);
第一个参数: 字符串形式的文件路劲和文件名
第二个参数: 操作标志
必须包含以下访问模式中的一种:
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 可读可写
还可以按位或以下标志
O_APPEND 追加,写入到文件尾部
O_CREAT 文件不存在则创建,存在则打开
O_EXCL 与O_CREAT搭配使用
O_TRUNC 文件存在且允许写,则清空文件
第三个参数:操作模式,权限
返回值:成功返回新的文件描述符,失败返回-1
函数功能:主要用于打开、创建疑问文件设备
(2)close 函数
#include <unistd.h>
int close (int fd);
函数功能:主要用于关闭参数fd指定的文件描述符,也就是描述符fd不在关联任何一个文件,以便于下次使用
(3) read函数
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
第一个参数:文件描述符(从哪里读)
第二个参数:缓冲区的首地址(存到哪里)
第三个参数:读取数据大小
返回值:成功返回读取的字节数,返回0表示读取到文件尾部失败返回-1
函数的功能: 表示从指定的文件中读取指定大小的数据
(4)write函数
#inlcue <unistd.h>
ssize_t write(int fd, const,void *buf, size_t count);
(5)lseek
#include <sys/types.h>
#include <int fd, off_t offset, int whence>;
第一个参数:文件描述符
第二个参数:偏移量
第三个参数:起始位置
SEEL_SET
SEEK_CUR
SEEK_END