SYNOPSIS (总览)

#include <stdio.h>

FILE *fopen(const char *path, const char *mode);
FILE *fdopen(int fildes, const
char *
mode);
FILE *freopen(const char
*
path, const char *mode, FILE
*
stream);

DESCRIPTION 描述

函数 fopen 打开 一个 文件, 并且 分配 一个 流, 文件名 由 字符串
path 指定.

参数 mode 指向 一个 字符串, 该 字符串 用 下面 的 字符串 开头 (之后 可以有 附加的 字符):

r
为 读操作 打开 文本文件. 流 被定位于 文件 的 开始.
r+
为 读写操作 打开 文本文件. 流 被定位于 文件 的 开始.
w
为 写操作 创建 文本文件, 或者 将 已经 存在的 文件长度 截断为 零. 流 被定位于 文件 的 开始.
w+
为 读写操作 打开 文件. 如果 文件 不存在, 就 创建 它, 否则 将它 截断. 流 被定位于 文件 的 开始.
a
为 追加操作 (在文件尾写) 打开 文件. 如果 文件 不存在, 就 创建 它. 流 被定位于 文件 的 末尾.
a+
为 追加操作 (在文件尾写) 打开 文件. 如果 文件 不存在, 就 创建 它. 读文件的初始位置 是 文件 的 开始, 但是 写文件 总是 被追加到
文件 的 末尾.

可以 把 字母 ``b'' 添加到 字符串 mode 的 末尾, 或者 插到 上面 任何 两个字符的 字符串 的 中间. 这样 只是 为了
和 ANSI X3.159-1989 (``ANSI C'') 标准 严格 保持 兼容, 没有 实际的 效果; 在 所有遵循 POSIX 的 系统 中,
``b'' 都 被忽略, 包括 Linux. (其他系统 可能会 分别对待 文本文件 和 二进制文件, 如果 在 进行 二进制文件 的 I/O, 那么 添加
``b'' 是个 好主意, 因为 你的程序 可能会 被移植到 非 Unix 环境中.)

任何 新建文件 的 访问模式 是
S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH
(0666), 并且 用 进程的 掩码值 umask 加以修改 (参见 umask(2)).

在 读/写流 上 可以 任意 顺序 混合 进行 读写操作. 注意 ANSI C 要求 在 输出和输入操作 之间 插入 一个 文件定位函数, 除非
输入操作遇到了 文件结束符. (如果 不是 这种情况, 那么 读操作 总是 返回 写操作 的 结果而不是 最后的 内容.) 因此, 最好 (在 Linux 中
有时 是必须的) 对 这样的流 的 写/读操作 之间 加入 一个 fseek 或是 fgetpos 操作. 这个操作 可以 是一个
空操作 (如 fseek(..., 0L, SEEK_CUR)), 只利用其 文件同步 这个 副效应.

用 追加方式 打开 文件 (a 作为 mode 的 第一个 字符) 将使得 所有后续的 写操作 发生在 文件末尾, 如同 之前
调用了

fseek(stream,0,SEEK_END);

一样.

fdopen 函数 将 一个流 和 已存在的 文件描述符 fildes 联系 起来. 流的 操作模式 mode
(取值为 "r", "r+", "w", "w+", "a", "a+" 之一) 必须 与 该文件描述符 的 操作模式一致. 流的 定位标识 设置为
fildes 原有的值, 清除 错误标记 和 文件结束标记. 模式 "w" 或者 "w+" 不会 截断 文件. fdopen 不复制
文件描述符, 在关闭 fdopen 创建的 流 时, 也不关闭 该文件描述符. 对 共享内存对象 实施 fdopen 的 结果
没有定义.

freopen 函数 打开 用 path 说明 的 文件, 并且 和 stream 指定的流 联系 起来.
原来的流 (如果 存在的话) 被关闭. 参数 modefopen 中的 用法 一样. freopen 函数
主要的用处 是 改变 标准文本流 (stderr, stdin, 或 stdout) 联系 的 文件.

RETURN VALUE (返回值)

如果 操作 成功, fopen, fdopen
freopen 返回 一个 指向 文件对象 FILE 的 指针, 否则 返回 NULL 并 设置 全局变量
errno 来 指出 错误的发生.

ERRORS

EINVAL
fopen, fdopen, 或 freopen 提供的 参数 mode 无效.

fopen, fdopenfreopen 也有可能 失败 并置 errno
malloc(3) 指定的值.

fopen 也有可能 失败 并置 errnoopen(2) 指定的值.

fdopen 也有可能 失败 并置 errnofcntl(2) 指定的值.

freopen 也有可能 失败 并置 errnoopen(2),
fclose(3) 和 fflush(3) 指定的值.

fopen, fdopen, freopen - 打开流的更多相关文章

  1. fopen(),fclose() 打开/关闭文件

    打开/关闭/刷新流 1. fopen() 打开流 功能: 1)fopen()打开由 path指定的一个文件. 2)fdopen()获取一个先有的文件描述符,并使一个标准的I/O流与该描述相结合.此函数 ...

  2. Linux(C/C++)下的文件操作open、fopen与freopen

    open是linux下的底层系统调用函数, fopen与freopen c/c++下的标准I/O库函数,带输入/输出缓冲. linxu下的fopen是open的封装函数,fopen最终还是要调用底层的 ...

  3. Linux(C/C++)下的文件操作open、fopen与freopen via Boblim

    Linux(C/C++)下的文件操作open.fopen与freopen open是linux下的底层系统调用函数,fopen与freopen c/c++下的标准I/O库函数,带输入/输出缓冲. li ...

  4. thinkphp5 404 file_put_contents 无法打开流:权限被拒绝

    如果你用TP的时间比较长,或者说你比较了解TP的人都会知道,TP的runtime它需要的权限是很大的,如果你只给一般权限肯定是不行的,通常都是给runtime权限:777: linux命令如下: cd ...

  5. Linux open fopen fdopen

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

  6. C\C++中 fopen中文件打开方式的区别:

    在C语言中,大家常用到fopen打开文件,准备进行写操作,再用fwrite把数据写入文件,最后用fclose关闭文件. 如以下C代码:   #include <stdio.h> char ...

  7. Linux系统学习笔记:文件I/O

    Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...

  8. 【linux草鞋应用编程系列】_1_ 开篇_系统调用IO接口与标准IO接口

    最近学习linux系统下的应用编程,参考书籍是那本称为神书的<Unix环境高级编程>,个人感觉神书不是写给草鞋看的,而是 写给大神看的,如果没有一定的基础那么看这本书可能会感到有些头重脚轻 ...

  9. [05]APUE:标准 I/O 库

    [a] setvbuf / setbuf #include <stdio.h> int setvbuf(FILE *restrict fp, char *restrict buf, int ...

随机推荐

  1. webstorm运行less文件

    在编写css代码时,使用less能提高我们编程得效率. Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量.混合(mixin).函数等功能,让 CSS 更易维护.方便制作主题 ...

  2. 洛谷P3384【模板】树链剖分

    题目描述 如题,已知一棵包含\(N\)个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作\(1\): 格式: \(1\) \(x\) \(y\) \(z\) 表示将树从\(x\ ...

  3. vue2中使用ajax

    vue中本身没有ajax功能,需要使用扩展,现在推荐使用的是axios,github地址如下 https://github.com/axios/axios 下面各个示例 <!DOCTYPE ht ...

  4. thinphp5会员注册邮箱验证

    1.首先完成邮箱发送http://www.cnblogs.com/jcydd/p/7299750.html 2.在完成会员新增后执行后置函数,在模型类当中 //注册后置函数 protected sta ...

  5. JMETER进行REST API测试(分步指南)

    我确定你在这里是因为你需要加载测试Json Rest API.这并不奇怪,因为Rest API现在越来越受欢迎. 这本指南的目的:帮助您进行负载测试一个Json的 REST API 通过一个具体的例子 ...

  6. 3、kvm配置vnc

    配置kvm通过vnc访问 virsh edit privi-server 添加如下配置: <graphics type='vnc' port='5901' autoport='no' liste ...

  7. CF24D Broken robot 后效性DP

    这题咕了好久..... 设$f[i][j]$表示从$(i,j)$到最后一行的期望步数: 则有 $ f[i][1]=\frac{1}{3}(f[i][1]+f[i][2]+f[i+1][1])+1$ $ ...

  8. 【ACM】一种排序

    一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数 ...

  9. CSU 1453: 平衡序列 学会线段树后必做

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1453. 题目:给定一个大小为100000的数组,里面的数字最大也是100000.现在叫你求出一段子 ...

  10. 有限状态机在单片机和 Arduino 编程中的应用

    有限状态机在单片机和 Arduino 编程中的应用,个人认为在实际中这是一种思想,意味着解决一类问题. 本帖最后由 张飞 于 2015-3-4 20:18 编辑 在单片机编程中,如果在不使用操作系统的 ...