1. 打开/关闭文件

1). 打开文件 / fopen

  • 作用

    打开一个文件,将其与文件流联系起来,方便后续的操作

  • 头文件

        #include <stdio.h>
  • 函数原型

        FILE *fopen(const char *file_name, const char *mode)
  • 参数

  • file_name: 欲打开的文件名(可包含路径)

  • mode:

       r(rb):      只读的方式打开文件  (该文件必须存在)
    r+(rb+): 以读&写的方式打开文件 (该文件必须存在)
    w(wb): 只写的方式打开文件 (若不存在,则创建该文件)
    w+(wb+): 以读&写的方式打开文件 (若不存在,则创建该文件)
    a(ab): 以只写的方式追加,若文件存在,则追加数据;若不存在,则创建文件
    a+(ab+): 以读&写的方式追加,若文件存在,则追加数据;若不存在,则创建文件
  • 返回值

    成功:返回文件指针

    失败:返回 NULL

    错误码:见errno

  • 相似函数

        FILE *fdopen(int fd, const char *mode)  //POSIX函数,通过文件描述符打开文件
    FILE *freopen(const char *path, const char *mode, FILE *stream) //重新打开某个文件(相当于重启)

2). 关闭文件 / fclose

  • 作用

    关闭一个已经打开的文件

  • 头文件

        #include <stdio.h>
  • 函数原型

        int fclose(FILE *fp)
  • 参数

  • fp: fopen打开文件时候返回的流指针(FILE *)
  • 返回值

    成功:0

    失败:EOF (End Of File)

2. 读/写文件流

ASCI C 提供了3种不同的I/O处理函数:

  • 字符读/写

fgetc / getc / getchar

fputc / putc

  • 行读/写

fgets / gets

fputs / puts

  • 块读/写

fread

fwrite

1). 字符读/写

①. fgetc / getc / getchar

  • 作用

    读取文件流中的字符并返回

  • 头文件

        #include <stdio.h>
  • 函数原型

        int fgetc(FILE *stream)
    int getc(FILE *stream) //同fgetc
    int getchar(void) //是getc(stdin)
  • 参数

stream: fopen打开文件时候返回的流指针(FILE *)

  • 返回值

    成功:返回读取的字符(以其ACSII码的形式)

    失败:EOF

②. fputc / putc / putchar

  • 作用

    关闭一个已经打开的文件

  • 头文件

        #include <stdio.h>
  • 函数原型

        int fputc(int c, FILE *stream)
    int putc(int c, FILE *stream) //same to fputc
    int putchar(int c); //same as putc(c, stdout)
  • 参数

stream: fopen打开文件时候返回的流指针(FILE *)

  • 返回值

    成功:返回读取的字符(以其ACSII码的形式)

    失败:EOF

2). 行读/写

①. fgets / gets

  • 作用

    从文件流中读取一行字符串

  • 头文件

        #include <stdio.h>
  • 函数原型

        char *fgets(char *s, int size, FILE *stream)
    char *gets(char *s)
  • 参数

  • s:存储读取字符串的buffer
  • stream: fopen打开文件时候返回的流指针(FILE *)
  • 返回值

    成功:读取到的字符串

    失败:NULL

②. fputs / puts

  • 作用

    向流中写入一行字符串

  • 头文件

        #include <stdio.h>
  • 函数原型

        int fputs(const char *s, FILE *stream)
    int puts(const char *s)
  • 参数

  • s:欲输出的字符串
  • stream: fopen打开文件时候返回的流指针(FILE *)
  • 返回值

    成功:返回字符串的字符个数(sizeof("xxx"))

    失败:EOF

3). 块读/写

①. fread

  • 作用

    从流中读取一定数量的字符

  • 头文件

        #include <stdio.h>
  • 函数原型

        size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
  • 参数

  • ptr:读取到的数据存储到该指针所执行的内存
  • size:每个数据块的大小
  • nmemb:需要读取多少个字符块
  • stream: fopen打开文件时候返回的流指针(FILE *)
  • 返回值

    成功:返回读取的bytes

    失败:不等于读取的字节数

②. fwrite

  • 作用

    向流中写入一定数量的字符

  • 头文件

        #include <stdio.h>
  • 函数原型

        size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
  • 参数

  • ptr:读取到的数据存储到该指针所执行的内存
  • size:每个数据块的大小
  • nmemb:需要读取多少个字符块
  • stream: fopen打开文件时候返回的流指针(FILE *)
  • 返回值

    成功:返回写入的bytes

    失败:不等于读取的字节数

3. 文件流检查

当读取/写入文件错误,需要对文件流进行检查,看到底是读取到了文件末尾还是真的发生了错误,有以下几个函数可以采用:

  • feof:

    检查是否到了文件末尾(EOF, End-Of-File)
  • ferror:

    检查文件流是否发生了错误
  • clearerr

    清除所有的文件流错误(包括EOF)
  • fileno

    检查文件流的合法性,并返回与文件流对应的文件描述符fd

1). feof

  • 作用

    检查是否到了文件流的结尾(EOF)

  • 头文件

        #include <stdio.h>
  • 函数原型

        int feof(FILE *stream)
  • 参数

stream: fopen打开文件时候返回的流指针(FILE *)

  • 返回值

    已到文件尾:非0值

    未到文件尾:0

    失败:默认不允许失败,为-1

2). ferror

  • 作用

    检查文件流是否发生错误

  • 头文件

        #include <stdio.h>
  • 函数原型

        int ferror(FILE *stream)
  • 参数

stream: fopen打开文件时候返回的流指针(FILE *)

  • 返回值

    成功:非0值

    默认不允许失败,真的失败为-1

3). clearerr

  • 作用

    清除文件流的错误

  • 头文件

        #include <stdio.h>
  • 函数原型

        int clearerr(FILE *stream)
  • 参数

stream: fopen打开文件时候返回的流指针(FILE *)

  • 返回值

    总是成功,所以无需返回值

4). fileno

  • 作用

    检查文件流是否发生错误

  • 头文件

        #include <stdio.h>
  • 函数原型

        int fileno(FILE *stream)
  • 参数

stream: fopen打开文件时候返回的流指针(FILE *)

  • 返回值

    成功:文件描述符

    失败:-1

4. 文件流定位

  • ftell:

    返回当前读写位置
  • fseek:

    修改当前读写位置
  • rewind:

    重置当前读写位置

1). ftell

  • 作用

    获取当前的读写位置

  • 头文件

        #include <stdio.h>
  • 函数原型

        long ftell(FILE *stream)
  • 参数

stream: fopen打开文件时候返回的流指针(FILE *)

  • 返回值

    成功:当前相对文件开头的指针偏移量

    失败:-1

2). fseek

  • 作用

    修改当前的读写位置

  • 头文件

        #include <stdio.h>
  • 函数原型

        int fseek(FILE *stream, long offset, int whence)
  • 参数

  • stream: fopen打开文件时候返回的流指针(FILE *)
  • offset: 相对于whence的偏移量(可正可负)
  • whence: 文件指针位置

SEEK_SET: 文件起始位置

SEEK_CUR: 文件当前指针位置

SEEK_END:文件结尾位置

  • 返回值

    成功:0

    失败:-1

3). rewind

  • 作用

    将文件流指针指向开始位置

  • 头文件

        #include <stdio.h>
  • 函数原型

        void rewind(FILE *stream)
  • 参数

stream: fopen打开文件时候返回的流指针(FILE *)

  • 返回值

    无返回值

4). fgetpos / fsetpos

  • 作用

    获取/设置当前文件流指针的位置

  • 头文件

        #include <stdio.h>
  • 函数原型

        int fgetpos(FILE *stream, fpos_t *pos)  //same as ftell(stream)
    int fsetpos(FILE *stream, fpos_t *pos) //same as fseek(stream, pos, SEEK_SET)
  • 参数

  • stream: fopen打开文件时候返回的流指针(FILE *)
  • pos: 相对于文件开始的偏移量
  • 返回值

    成功:0

    失败:-1

Linux 文件流管理的更多相关文章

  1. Linux 文件权限管理

    1.文件权限的概述 在Linux系统下,使用权限来保护资源的安全将是一种不错的选择.系统中每个文件的权限都有可读(r).可写(w)和可执行(x)这三种权限,它们分别对应权限数值4.2 和1.系统为每个 ...

  2. Linux - 文件基本操作管理

    文件基本操作管理   复制文件和目录 格式: Cp 源文件(文件夹) 新目标文件名(文件夹) 相同目录下,指定文件名. 不同目录下,不需要指定文件名. 参数: –r:递归复制整个目录树. –v:再复制 ...

  3. 《linux文件权限管理大总结》RHEL6

    在linux系统下文件的权限通常会以下面的格式显示出来: Chmod文件权限: 权限的管理chmod -a  所有的权限 -u 文件所有者的权限 -g 组权限 -o 其他用户的权限 可以使用运算符来设 ...

  4. Linux文件的管理

    创建:touch  vim/vi  echo重定向  cat touch 管理: atime  mtime touch  文件名  //如果文件不存在,不创建文件 删除:mv /tmp find |x ...

  5. 一个故事看懂Linux文件权限管理

    前情回顾: 我通过open这个系统调用虫洞来到了内核空间,又在老爷爷的指点下来到了sys_open的地盘,即将开始打开文件的工作. 详情参见:内核地址空间大冒险:系统调用 open系统调用链 我是一个 ...

  6. Linux文件权限管理(持续更新)

    文章是从我的个人博客上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com 以root身份登录linux以后, ls -al 可以看到 -rw-rw-r--  1 wangzhe ...

  7. Linux文件基本操作管理

    这一篇总结Linux系统中文件和目录的创建,复制,移动和重命名,包括删除这些最常用的操作. 创建 1,创建目录 使用命令:mkdir 实践:在根目录下创建一个目录命名为mcgrady 2,创建文件 使 ...

  8. Linux 目录流管理

    目录 1. 打开/关闭文件 1). 打开目录 / opendir 2). 关闭文件 / fclose 2. 读/写目录流 1). 目录流-读 / readdir & readdir_r 3. ...

  9. Linux 文件IO管理 - POSIX

    以下是对POSIX的简短解释: POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX标准定义了操 ...

随机推荐

  1. 《Are your lights on?》读后感

    楔子(看过某类小说的孩纸对此应该不陌生...): <你的灯亮着吗?>讲了些什么?它为我们总结了解决问题的一般方法?不,它只是建议我们遇到问题后应该怎么做(绝对不等于解决问题的方法).这些建 ...

  2. Hello World! 我的程序员入坑之旅!

    先说下本文标题,各行各业都有自己的行规和一些内行人玩的梗什么的,这是我开始写技术博客的第一篇,所以它的标题毫无疑问只能是Hello World! 介绍一下我自己 我算是一个少见的科班出身的开发者了,1 ...

  3. 【cocos2d-x 3.0-Mac配置篇】

    就在昨天触控正式发布了3.0正式版本... 在这个喜大普奔的日子里,我们又开始了新一轮的革命,先不说其他的,再来看看3.0目录文件里面有什么? 首先是精简了很多,无论是从目录结构,和所用到的工具类,都 ...

  4. Flask 语音分析

    1. 安装api      百度组件 pip install baidu-aip 2.登录百度ai账号 ,建立一个账号 http://ai.baidu.com/ from aip import Aip ...

  5. AndroidStudio的一些快捷键的使用

    1.返回上一次浏览快捷键的设置   https://blog.csdn.net/yingtian648/article/details/73277388 2.格式化代码的快捷键的设置      htt ...

  6. 实现一个算法,寻找字符串中出现次数最少的、并且首次出现位置最前的字符 如"cbaacfdeaebb",符合要求的是"f",因为他只出现了一次(次数最少)。并且比其他只出现一次的字符(如"d")首次出现的位置最靠前。

    实现一个算法,寻找字符串中出现次数最少的.并且首次出现位置最前的字符如"cbaacfdeaebb",符合要求的是"f",因为他只出现了一次(次数最少).并且比其 ...

  7. express 重新加载

    1,res.location() 2. res.redirect() location()与redirect()的比较: Express的response对象,是对Node.js原生对象ServerR ...

  8. 使用泛型SwingWorker与EDT事件分发线程保持通讯

    为什么要使用SwingWorker 在swing开发中,如果一个应用程序,执行一些任务,需要大量的时间来完成,比如下载一个大文件或执行一个复杂的数据库查询. 我们假设这些任务是由用户使用一个按钮触发的 ...

  9. Python小白学习之路(六)—— 【元祖】【元祖相关功能】

    元祖 tu = (111,'alex',(11,['aa','xhg',(78,43)],'aaa'),789,) 通过这个例子,我们看到元祖的特征: 是通过括号()括起来的 一般写元祖的时候,推荐子 ...

  10. 解决后台json数据返回的字段需要替换的问题

    有时候后台json数据返回的字段含有“id”,也有可能是有时候为了减少代码的冗余,两页面之间只是数据模型个别属性的区别,所以这时候最好是用到模型属性的替换,用新的属性替换返回的json数据的字段.这里 ...