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. 浅谈UML——九种图(一)

    前言 学UML将近两个星期了,对UML有了一定的了解,学过的没学过的都知道UML中最最最核心的部分要数那九个图了.浅谈UML九种图. 实例 1.用例图: 什么是用例?描绘一个系统外在可见的需求情况,是 ...

  2. PJzhang:英国通信总部GCHQ开源产品-网络瑞士军刀CyberChef

    猫宁!!! 参考链接:https://www.4hou.com/info/news/981.html 这个产品免费开源易用,如果称之为网络瑞士军刀,没什么异议. github地址:https://gi ...

  3. 我的省选 Day -12

    Day -12 今天是三月份的最后一天,春天真的也就走过了1/3了呢. 昨晚做了个神秘而悲伤的梦.(这样子写下来会不会不太好.. 我梦见欢洛了. 那是在新校区的门口,我看见他,然后向他跑过去,他转身对 ...

  4. Windows 在目录中搜索哪个文件中有指定字符串

    findstr /s /i "string" *.* 表示,当前目录以及子目录下的所有文件中查找"string"这个字符串. *.*表示所有类型的文件. /s ...

  5. 洛谷P3870 [TJOI2009]开关

    题目描述 现有\(N(2 ≤ N ≤ 100000)\)盏灯排成一排,从左到右依次编号为:\(1,2,......,N\).然后依次执行\(M(1 ≤ M ≤ 100000)\)项操作,操作分为两种: ...

  6. Java基础笔记(十)—— 数组

    数组是具有相同类型的数据的集合,是一种引用数据类型,一般具有固定的长度,并且在内存中占据连续的空间. 数组声明:数据类型[ ] 数组名;             数据类型 数组名[ ]; 如:int[ ...

  7. POJ1032 Parliament

    题目来源:http://poj.org/problem?id=1032 题目大意:给定一个正整数N(5<=N<=1000),将N拆为若干个不同的数使得它们的乘积最大(找到一组互不相等,和为 ...

  8. nginx大量TIME_WAIT的解决办法

    1.netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 查看time_wait 很大 2.解决此问题需要对sysc ...

  9. Unity 动画系统目录

    引言 提到动画,你想到的是什么? 图片在循环播放构成的动画.UI物体的循环变色.2D 3D物体在循环运动.链条弹簧的运动.3D的玩家在行走奔跑挥剑.非人形的运动... 动画实现方式的分类 动画实现的方 ...

  10. luogu P5142 区间方差 十分优美的线段树

    又来了个维护方差的线段树.... 大致推导过程(字丑多包涵QAQ) 注意取模时要加一些100000007防止出现负数.. #include<cstdio> #include<iost ...