zoukankan      html  css  js  c++  java
  • 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将文件映射到进程的虚拟地址,通过对内存里数据的修改,直接修改文件的内容。
  • 相关阅读:
    TurtleBot3 安装OpenCR包
    TurtleBot3-树苺派SD卡备份镜像
    TurtleBot3-树莓派开启SSH服务
    ajax 接收json数据的进一步了解
    获取从天气预报接口返回回来的json数据
    创建一个学生表student,默认的表空间为users,字段自定,同时为表的各个字段分别添加合适的约束,然后测试约束的验证状态。
    org.apache.jasper.JasperException: Unable to compile class for JSP: Invalid character constant
    oracle 管理表空间
    !!!myeclipse 上加载本地图片问题,无法加载问题
    js 关闭页面(Scripts may close only the windows that were opened by it.)
  • 原文地址:https://www.cnblogs.com/Kernel001/p/7732566.html
Copyright © 2011-2022 走看看