zoukankan      html  css  js  c++  java
  • 函数说明


    1. 打开或关闭一个文件

    NAME
    open, creat open and possibly create a file or device

    SYNOPSIS
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>

    open用来打开一个文件(或创建一个文件,并打开它)
    int open(const char *pathname, int flags);
    int open(const char *pathname, int flags, mode_t mode);
    pathname: 要打开或创建的文件名(带路径名)
    flags: 打开标志。告诉系统,是以何种方式打开这个文件
    O_RDONLY: read only
    O_WRONLY: write only
    O_RDWR: read/write
     以上三个标志选其一。
    O_APPEND: append 追加方式
    O_CREAT: create 创建标志(如果文件不存在则创建)
    O_EXCL: 该标志一般和O_CREAT配合使用,用来测试文件是否存在。
    指定O_EXCL | O_CREAT ,如果文件存在,则open失败,并且
    errno == EEXIST
    O_NONBLOCK: non block() 非阻塞方式打开文件。
    该标志如果设置,则为非阻塞方式
    该标志如果不设置,则为阻塞方式
    O_TRUNC: truncate ,截短标志。
    假如文件存在,并且是一个普通文件,而且打开方式
    为O_RDWR/O_WRONLY,则文件内容会被清空。
    ....
    以上标志,用"或"来组合

    当第二个参数指定了O_CREAT(创建标志),
    那么第三个参数mode指定创建的文件的权限
    mode: 用来指定新创建的文件的权限。有两种方式指定:
    (1) user: S_IRUSR S_IWUSR S_IXUSR -> S_IRWXU == S_IRUSR | S_IWUSR |S_IXUSR
    group: S_IRGRP S_IWGRP S_IXGRP -> S_IRWXG == S_IRGRP | S_IWGRP | S_IXGRP
    other: S_IROTH S_IWOTH S_IXOTH -> S_IRWXO == S_IROTH | S_IWOTH | S_IXOTH
    (2) 0660

    返回值:
    如果成功返回文件描述符(>0,后续所有对文件的操作都必须
    通过它,因为它代表这个文件。)
    失败返回-1, 并且errno被设置


    int creat(const char *pathname, mode_t mode);
    <=> open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode);


    =====
    NAME
    close - close a file descriptor

    SYNOPSIS
    #include <unistd.h>

    关闭一个文件描述符
    int close(int fd);

    2. 读/写一个文件
    NAME
    read - read from a file

    SYNOPSIS
    #include <unistd.h>

    read用来从fd指定的文件中读取nbyte个字节数据到buf指向
    的空间中去。
    ssize_t read(int fd, void *buf, size_t nbyte);
    fd:文件描述符(open返回值),表示从哪个文件里面读
    buf:一个指针,指向一段内存,用来保存从文件里面读到的数据
    nbyte:读多少字节数据.
    返回值:
    > 0 : 成功读取到了字节数,文件偏移量(光标)随之增加
    = 0: 到达文件尾了(文件结束啦)
    < 0(-1) :出错了。同时errno被设置
    ===
    NAME b
    write - write on a file

    SYNOPSIS
    #include <unistd.h>

    write用来把buf指向的内存空间中至多nbyte个字节数据写到
    fd指定的文件中去。
    ssize_t write(int fd, const void *buf, size_t nbyte);
    fd:文件描述符(open返回值),表示写到哪个文件中去
    buf:指针,指向要写到文件中去的数据
    nbyte:写多少字节
    返回值:
    > 0 :成功写到文件中去的字节数,文件偏移量随之增加
    =0: 什么也没写
    -1:出错,同时errno被设置

    3. 定位
    lseek

    NAME
    lseek - reposition read/write file offset

    SYNOPSIS
    #include <sys/types.h>
    #include <unistd.h>

    lseek用来给指定文件定位光标.(设置偏移量)
    off_t lseek(int fd, off_t offset, int whence);
    fd:文件描述符,要定位的文件
    offset:要设置的偏移量
    whence: 定位方式,有三种:
    SEEK_SET: 基于文件开头定位
    新的光标位置为 = 文件开头 + offset(不能< 0)
    SEEK_CUR:基于当前光标位置定位
    新的光标位置为= 当前位置 + offset(可正可负)
    SEEK_END:基于文件末尾定位
    新的光标位置为=文件末尾 + offset(可正可负)
    返回值:
    成功返回新的光标位置相对于文件开头的偏移量(以字节为单位)
    失败返回-1
    4. mmap/munmap

    NAME
    mmap, munmap - map or unmap files or devices into memory
    mmamp把一个文件或设备映射到内存
    munmap解映射

    SYNOPSIS
    #include <sys/mman.h>

    void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
    addr:把文件内容映射到内存哪个地址。一般为NULL,让操作系统自行分配。
    length:要映射的文件内容的长度。向上取PAGE_SIZE(4K)的整数倍
    prot:映射的内存区域的权限。(应与文件打开的权限一致,因为操作
    此区域内存实际上就是操作文件内容)
    PROT_EXEC:可执行
    PROT_READ: 可读
    PROT_WRITE:可写
    PROT_NONE:没访问权限
    flags:映射标志。决定对映射部分的操作是否对其他进程可见。
    MAP_SHARED: 共享。对其他进程可见,内存操作直接应用到文件中去。
    MAP_PRIVATE:私有。对其他进程不可见,内存操作不应用到文件中去。
    fd:文件描述符。要映射的文件
    offset:偏移量。表示从文件的哪个位置开始映射。
    offset必须为PAGE_SIZE(4k)的整数倍。
    返回值:
    成功返回映射内存区域的首地址。
    如果失败返回MAP_FAILED,同时errno被设置。



    int munmap(void *addr, size_t length);
    解映射。与mmap相反的操作
    进程退出,会自动unmap
    但是关闭文件时,不会自动unmap

    NAME
    open a file or device

    SYNOPSIS
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>

    参数列表,参数列表中的每一个参数叫做形参
    int open(const char *pathname, int flags);
    参数:
    pathname:要打开的文件的路径或者文件名
    flags: 打开的标志
    只读:O_RDONLY
    只写:O_WRONLY
    可读可写:O_RDWR

    返回值:file descriptor文件描述符
    成功: 返回打开的文件的文件描述符
    失败:返回-1

    NAME
    write - write to a file descriptor

    SYNOPSIS
    #include <unistd.h>

    ssize_t write(int fd, const void *buf, size_t count);
    参数:
    fd:要写入的文件的文件描述符,open的返回值
    buf: 一个容器,用来装需要写入文件中的内容的(一个指针,指向需要写入文件的内容)
    count:需要写入文件的内容的字节数!!!

    NAME
    mmap, munmap - map or unmap files or devices into memory

    SYNOPSIS
    #include <sys/mman.h>

    void *mmap(void *addr, size_t length, int prot, int flags,
    int fd, off_t offset);

    addr: 表示您要映射到进程哪个地址上去。一般为NULL,让操作系统
    自动分配一个地址。

    length:要映射文件或设备多少字节,映射长度。会自动向上取PAGE_SIZE(4k)
    的整数倍。
    prot: 映射区域的权限,应与打开文件时设定的权限一致,因为操作该映射区域
    实际就是操作文件
    PROT_READ:映射区域为只读
    PROT_WRITE:映射区域为读写
    PROT_EXCE: 映射区域可执行
    PROT_NONE: 映射区域没有访问权限

    flags: 映射标志
    MAP_SHARED: 共享的。对映射区域的操作直接操作在文件上。
    MAP_PRIVATE:私有的。对映射区域开了一个私有的缓冲,对映射区域的操作不直接操作在文件上。

    fd: 文件描述符,表示您要映射哪个文件或设备
    offset: 偏移量,表示从文件哪个位置开始映射。这个地方必须为PAGE_SIZE(4096)的整数倍。

    返回值:
    成功返回映射区域的首地址
    失败返回MAP_FAILED ,同时errno被设置。

    munmap解映射
    int munmap(void *addr, size_t length);

    read用来从fd指定的文件中,读取count个字节到buf指向的内存
    ssize_t read(int fd, void *buf, ssize_t count);

    返回值:
    > 0: 表示实际读到的字节数
    =0: 文件读到末尾
    <0: 出错,同时errno被设置。

  • 相关阅读:
    友盟推送
    主流推送平台分析
    “完成”的定义和测试的职责
    HDU 1069 Monkey and Banana
    HDU 5587 Array
    ACM组队安排(hdu校赛)
    逆袭指数(hdu校赛)
    玩骰子(hdu校赛)
    Codeforce 546 A. Soldier and Bananas
    Codeforce 546 B. Soldier and Badges
  • 原文地址:https://www.cnblogs.com/zhulinhaibao/p/6985418.html
Copyright © 2011-2022 走看看