malloc实现机制缓冲机制文件操作mmap虚拟地址(day06)
Posted Kernel001
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了malloc实现机制缓冲机制文件操作mmap虚拟地址(day06)相关的知识,希望对你有一定的参考价值。
一、malloc的实现机制(缓冲机制) 库函数跟系统调用之间的关系 什么是缓冲? 内存分配的原理。 封装 函数A的实现代码中调用了函数B。函数B的功能是函数A主要的功能,这样就说函数A封装了函数B。 举例说明 malloc的实现机制(缓冲) 代码参见malloc.c 080f8-08119 33块 内存管理结束了 二、文件的操作(文件内容的操作) 文件的打开、关闭、读、写、读写位置的重定位 标c中 fopen(3) fclose(3) fread(3) fwrite(3) fseek(3)... 系统调用 open(2) close(2) read(2) write(2) lseek(2) open(2) #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); int open(const char *pathname, int flags,...); 功能:打开一个文件,有可能创建一个文件 参数: pathname:指定要打开的文件的名字 flags: 三选一: O_RDONLY:只读 O_WRONLY:只写 O_RDWR:可读可写 另外,可以按位或0个或多个创建标记和状态标记 O_CREAT: 如果文件不存在,创建文件。第三个参数mode指定了新文件的权限。新文件的权限为mode & ~umask O_EXCL:如果和O_CREAT在flags中被一起指定,文件存在,报错。 O_NOCTTY: O_TRUNC:打开的文件存在,并且是一个普通文件,有写的权限,那么文件内容清空 O_APPEND:以追加方式打开文件,文件的都写位置被定位在文件的末尾。 ...:可变参数.可变参数的类型、个数取决于可变参数前边的那个参数。 返回值: 返回一个新的文件描述符 -1 错误 errno被设置 补充: 文件描述符 小的 非负整数? 文件描述符是当前进程没有打开的、最小的文件描述符。 进程 程序运行的实例。每个进程都有自己的pid。每个进程还有自己的户口本,专业术语称作PCB (process control block) PCB中记录了进程使用到的资源。(软件资源 硬件资源) struct task{ }; 有一个成员记录了,这个进程打开的文件。 进程默认从bash继承0 1 2三个文件描述符 0 标准输入 键盘 STDIN_FILENO 1 标准输出 显示器 STDOUT_FILENO 2 标准错误输出 显示器 STDERR_FILENO 文件的类型 linux下一切皆文件。 -rw-rw-r-- 1 tarena tarena 664 8月 7 11:04 malloc.c - 普通文件 d 文件夹类型的文件 c 字符设备文件 b 块设备文件 s socket文件 p 管道文件 l 软链接文件 权限的问题 rw-rw-r-- 文件的权限 linux是一款多用户多任务的操作系统 所谓的多用户就是多个用户可以同时登陆操作系统,在操作系统上维护自己的工作。 老大 root 为每个用户指定了用户的地盘 用户工作主目录(家目录)~ 把用户分成很多的组。一个用户可以属于多个组。一个用户组包含多个用户。 r read w write x execute 文件的拥有者 属主 u 属组 g 其他人 o 所有的用户 a 改变文件的权限 chmod 权限 文件的名字 权限的构成 u+x u-x g-w g+w 可以使用数字表示权限。8进制的数据 0664 umask是什么玩意? umask是权限掩码 umask 0002 -------w- 创建文件的时候,将掩码中出现在权限位去除。 创建普通文件的时候。权限默认为是0666。 rw-rw-rw- 默认指定的权限 rw-rw-rw- -------w- umask rwxrwxr-x rw-rw-r-- 最终的权限 rw-rw-r-- mode&~umask 0033 ----wx-wx rw-rw-rw- rwxr--r-- rw-r--r-- close(2) #include <unistd.h> int close(int fd); 功能:关闭一个文件描述符 参数: fd:指定要关闭的文件描述符 返回值: -1 错误 errno被设置 0 成功 举例说明 1、以只读方式打开文件。代码参见r_file.c 注意:为了方便对文件的操作,将文件操作中使用的头文件进行封装。p_file.h 2、以读写方式打开文件,文件不存在,创建文件,权限指定为0644.文件存在,报错,文件已经存在。 代码参见 rw_file.c 3、以读写方式打开文件,文件不存在创建文件,指定文件的权限为0664。文件存在,将文件内容清空 代码参见 rw1_file.c read(2)/write(2) #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); 功能:从文件中读取数据 参数: fd:指定了具体的文件,从这个文件里读取数据 buf:将读取的数据存放到buf指定的地址空间里 count:向系统申请的要读取的字节数 返回值: 返回的是实际读取到的字节数。0到达了文件的末尾。 -1 错误 errno被设置 #include <unistd.h> ssize_t write(int fd,const void *buf,size_t count); 功能:向文件写数据 参数: fd:指定了具体的文件 buf:指定了内容存放的地址 count:指定了写入文件的字节数 返回值: -1 错误 errno被设置 返回写入文件中的字节数 举例说明 文件操作系统调用的使用 编写代码实现cat命令的功能。编译成可执行文件的名字为pcat 代码参见pcat.c 总结: 一、malloc的实现原理 缓冲机制 二、文件的操作 open close read write 三、使用mmap将文件映射到进程的虚拟地址,通过对内存里数据的修改,直接修改文件的内容。
以上是关于malloc实现机制缓冲机制文件操作mmap虚拟地址(day06)的主要内容,如果未能解决你的问题,请参考以下文章