zoukankan      html  css  js  c++  java
  • Linux文件的基本操作函数

    1、Linux文件的基本操作

    Linux文件的基本操作主要包括了文件的创建、打开、读写和关闭等基本操作。

    1.1、文件操作系统调用

    (1)创建文件系统函数

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

    参数:

             pathname:要创建文件的名称

             mode:新建文件的存取权限,可通过umask()系统调用改变文件权限

    返回值:

             成功:返回新的文件描述符

             失败:返回-1或者其它错误号

    (2)修改文件权限函数

    将文件设置为新的mask,并且返回旧的mask

    mode_t umask(mode_t mask);

    参数:

             mask:要设置的文件权限

    返回值:

             返回文件旧的权限

    (3)文件打开函数

    文件打开函数open()具有两种函数形式

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

    参数:

             pathname:要打开的文件名

             flages:文件打开的标志

          O_RDONLY:以只读方式打开文件

          O_WRONLY:以只写方式打开文件

          O_RDWR:以读写方式打开文件

          O_APPEND:以追加的方式打开文件

          O_CREAT:创建一个文件

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

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

             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

    返回值:

             成功:返回文件描述符

             失败:返回-1或者其他错误号

    (4)文件读函数

    对文件进行打开操作后,使用read()可以对文件进行读操作,函数原型如下

    ssize_t read(int fd, void *buf, size_t count);

    参数:

             fd:要读的文件的文件描述符

             buf:缓冲区,用来保存在文件中读到的内容

             count:要读的字节数

    返回值:

             成功:返回已经读到的字节数

             失败:返回-1

    (5)文件写函数

    对文件进行打开操作后,使用write()可以对文件进行写操作,函数原型如下

    ssize_t write(int fd, const void *buf, size_t count);

    参数:

             fd:要写的文件的文件描述符

             buf:缓冲区,保存要写入文件里面的内容

             count:要写入的字节数

    返回值:

             成功:返回已经写入的字节数

             失败:返回-1

    (6)文件指针定位函数

    使用lseek()能对文件指定的文件进行读写操作,函数原型如下

    off_t lseek(int fd, off_t offset, int whence);

    参数:

             fd:要操作的文件的文件描述符

             offset:相对于whence的偏移字节数,能取负值

             whence:相对位置

          SEEK_SET:相对文件开头

          SEEK_CUR:相对文件读写指针的当前位置

          SEEK_END:相对文件末尾

    返回值:

             成功:返回新的偏移位置

             失败:返回-1

    (7)文件关闭函数

    打开文件对文件进行相关的读写操作后,必须要关闭文件,函数原型如下

    int close(int fd);

    参数:

             fd:要关闭的文件的文件描述符

    返回值:

             成功:返回0

             失败:返回-1

    1.2、C库文件函数调用

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

    (1)文件创建和打开函数

    FILE *fopen(const char *path, const char *mode);

    参数:

             path:要创建或者打开的文件名

             mode:以何种方式打开或创建文件

          r/rb:以只读方式打开文件

          w/wb:以只写方式打开文件

          a/ab:以追加的方式打开文件,如果文件不存在,则创建文件

          r+/r+b/rb+:以读写的方式打开

          w+/w+b/wh+:以读写方式打开,如果文件不存在,则创建文件

          a+/a+b/ab+:以读和追加方式打开,如果文件不存在,则创建新文件

    返回值:

             成功:返回FILE文件指针

             失败:返回NULL

    (2)文件读写函数

    C库函数支持以字符或者字符串的形式对文件进行读写操作

    int fgetc(FILE *stream);
    char *fgets(char *s, int size, FILE *stream);
    int fputc(int c, FILE *stream);
    int fputs(const char *s, FILE *stream);
    int fprintf(FILE *stream, const char *format, ...);
    int fscanf(FILE *stream, const char *format, ...);
    size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
    size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

    (3)文件指针定位函数

    int fseek(FILE *stream, long offset, int whence);

    参数:

             stream:要操作的文件的文件指针

             offset:偏移量

             whence:文件的相对位置

          SEEK_SET:相对于文件头

          SEEK_CUR:相对于文件的当前位置

          SEEK_END:相对于文件的末尾

    返回值:

      成功:返回0

      失败:返回-1

    (4)文件关闭函数

    int fclose(FILE *stream);

    参数:

             stream:要关闭文件的文件指针

    返回值:

             成功:返回0

             失败:返回错误号

    参考:

    《LINUX设备驱动程序(第3版)》

    《Linux设备驱动开发详解:基于最新的Linux 4.0内核》

  • 相关阅读:
    vue项目中实现定时刷新页面(重新渲染数据实时更新)
    如何撤销 Git commit ?
    error: You have not concluded your merge (MERGE_HEAD exists)
    ajax的前世今生
    DevTools failed to load SourceMap: Could not load content for webpack:///node_modules/sockjs-client/
    Vue 项目如何配置代理解决跨域
    Nginx 到底是什么东西?
    JSON.parse()与JSON.stringify()的区别
    uni-app 中如何管理用户登录状态
    Oracle分析函数简析
  • 原文地址:https://www.cnblogs.com/Cqlismy/p/11358761.html
Copyright © 2011-2022 走看看