当前位置 主页 > 服务器问题 > Linux/apache问题 >

    详解Linux文件操作知识点

    栏目:Linux/apache问题 时间:2019-11-19 23:04

    文件操作的相关系统调用

    创建

    int creat(const char *filename, mode_t mode);

    参数mode 指定新建文件的存取权限,它同umask 一起决定文件的最终权限(mode&umask),其中umask 代表了文件在创建时需要去掉的一些存取权限,它只影响读、写和执行权限,调用函数为int umask(int newmask)。

    打开

    int open(const char *pathname, int flags);

    pathname是我们要打开的文件名(包含路径名称,默认在当前路径下)

    flags打开的标志

    O_RDONLY 以只读的方式打开文件

    O_WRONLY 以只写的方式打开文件

    O_RDWR 以读写的方式打开文件

    O_APPEND 以追加的方式打开文件

    O_CREAT 创建一个文件

    O_EXEC 如果使用了O_CREAT而且文件已经存在,就会发生一个错误

    O_NOBLOCK 以非阻塞的方式打开一个文件

    O_TRUNC 如果文件已经存在,则删除文件的内容

    int open(const char *pathname,int flag,mode_t mode)

    当flag为O_CREATE,指定mode标志,用来表示文件的访问权限

    S_IRUSR 用户可以读

    S_IWUSR 用户可以写

    S_IXUSR 用户可以执行

    S_IRWXU 用户可以读、写、执行

    S_IRGRP 组可以读

    S_IWGRP 组可以写

    S_IXGRP 组可以执行

    S_IRWXG 组可以读、写、执行

    S_IROTH 其他人可以读

    S_IWOTH 其他人可以写

    S_IXOTH 其他人可以执行

    S_IRWXO 其他人可以读、写、执行

    S_ISUID 设置用户的执行ID

    S_ISGID 设置组的执行ID

    mode标志也可以用数字来表示文件权限:

    每个数字可以取1(执行权限)、2(写权限)、4(读权限)、0(无)或者是这些值的和。

    第一位表示设置用户ID

    第二位表示设置组ID

    第三位表示用户自己的权限位

    第四位表示组的权限

    第五位表示其他人的权限

    open("test", O_CREAT, 10705);

    上述语句等价于:

    open("test", O_CREAT, S_IRWXU | S_IROTH | S_IXOTH | S_ISUID );

    读写

    int read(int fd, const void *buf, size_t length);
    int write(int fd, const void *buf, size_t length);

    参数fd文件描述符,buf为指向缓冲区的指针,length为缓冲区的大小(以字节为单位),返回值为实际读取和写入的字节数。

    read( )实现从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中,返回值为实际读取的字节数

    write( )实现将把length 个字节从buf 指向的缓冲区中写到文件描述符fd所指向的文件中,返回值为实际写入的字节数。

    定位

    对于随机文件,我们可以随机地指定位置读写:
    int lseek(int fd, offset_t offset, int whence);

    lseek()将文件读写指针相对whence移动offset(可取负值)个字节。操作成功时,返回文件指针相对于文件头的位置。

    参数whence可以使用如下值:

    SEEK_SET:相对文件开头。
    SEEK_CUR:相对文件读写指针的当前位置。
    SEEK_END:相对文件末尾。

    关闭

    int close(int fd);

    C库函数的文件操作——独立于具体的操作系统平台

    创建和打开

    FILE *fopen(const char *path, const char *mode);
    fopen()实现打开指定文件filename,其中的mode为打开模式,Linux 系统不区分二进制文件和文本文件。

    mode的值