fopen, fdopen, freopen - 打开流
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 指定的流 联系 起来.
原来的流 (如果 存在的话) 被关闭. 参数 mode 和 fopen 中的 用法 一样. freopen 函数
主要的用处 是 改变 标准文本流 (stderr, stdin, 或 stdout) 联系 的 文件.
RETURN VALUE (返回值)
如果 操作 成功, fopen, fdopen 和
freopen 返回 一个 指向 文件对象 FILE 的 指针, 否则 返回 NULL 并 设置 全局变量
errno 来 指出 错误的发生.
ERRORS
- EINVAL
- fopen, fdopen, 或 freopen 提供的 参数 mode 无效.
fopen, fdopen 和 freopen 也有可能 失败 并置 errno 为
malloc(3) 指定的值.
fopen 也有可能 失败 并置 errno 为 open(2) 指定的值.
fdopen 也有可能 失败 并置 errno 为 fcntl(2) 指定的值.
freopen 也有可能 失败 并置 errno 为 open(2),
fclose(3) 和 fflush(3) 指定的值.
fopen, fdopen, freopen - 打开流的更多相关文章
- fopen(),fclose() 打开/关闭文件
打开/关闭/刷新流 1. fopen() 打开流 功能: 1)fopen()打开由 path指定的一个文件. 2)fdopen()获取一个先有的文件描述符,并使一个标准的I/O流与该描述相结合.此函数 ...
- Linux(C/C++)下的文件操作open、fopen与freopen
open是linux下的底层系统调用函数, fopen与freopen c/c++下的标准I/O库函数,带输入/输出缓冲. linxu下的fopen是open的封装函数,fopen最终还是要调用底层的 ...
- Linux(C/C++)下的文件操作open、fopen与freopen via Boblim
Linux(C/C++)下的文件操作open.fopen与freopen open是linux下的底层系统调用函数,fopen与freopen c/c++下的标准I/O库函数,带输入/输出缓冲. li ...
- thinkphp5 404 file_put_contents 无法打开流:权限被拒绝
如果你用TP的时间比较长,或者说你比较了解TP的人都会知道,TP的runtime它需要的权限是很大的,如果你只给一般权限肯定是不行的,通常都是给runtime权限:777: linux命令如下: cd ...
- Linux open fopen fdopen
int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 以 ...
- C\C++中 fopen中文件打开方式的区别:
在C语言中,大家常用到fopen打开文件,准备进行写操作,再用fwrite把数据写入文件,最后用fclose关闭文件. 如以下C代码: #include <stdio.h> char ...
- Linux系统学习笔记:文件I/O
Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...
- 【linux草鞋应用编程系列】_1_ 开篇_系统调用IO接口与标准IO接口
最近学习linux系统下的应用编程,参考书籍是那本称为神书的<Unix环境高级编程>,个人感觉神书不是写给草鞋看的,而是 写给大神看的,如果没有一定的基础那么看这本书可能会感到有些头重脚轻 ...
- [05]APUE:标准 I/O 库
[a] setvbuf / setbuf #include <stdio.h> int setvbuf(FILE *restrict fp, char *restrict buf, int ...
随机推荐
- Codevs 1080 线段树练习(CDQ分治)
1080 线段树练习 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 一行N个方格,开始每个格子里都有 ...
- 2017-9-26 NOIP模拟赛
NOIP 2017 全真模拟冲刺 ---LRH&&XXY 题目名称 那些年 铁路计划 毁灭 题目类型 传统 传统 传统 可执行文件名 years trainfare destroy 输 ...
- ElasticStack之Elasticsearch集群搭建
需搭建服务器环境 操作系统 Host:port node 1 CentOS 7.2.1511 11.1.11.127:9200 node1 2 CentOS 7.2.1511 11.1.11.128: ...
- .netcore中无法使用System.Drawing --解决方案
问题重现: 无法正常使用 解决方法: 安装System.Drawing.Common的NuGet就能正常使用了 操作之后: 这个是.netcoe中的解决办法,.net framework解决方案中添 ...
- Codeforces Round #129 (Div. 2) A
Description The Little Elephant loves Ukraine very much. Most of all he loves town Rozdol (ukr. &quo ...
- js:数组里面获取键名和键值
在写php时用ajax异步传回的返回数组时是json格式,在js里面处理时有时需要用到键名,此时可以用in来处理 js只有数字索引: <script> var data = new arr ...
- 强连通图 Tarjan算法
算法学习:https://blog.csdn.net/qq_16234613/article/details/77431043 http://www.cnblogs.com/chenchengxun/ ...
- Gym 101055A 计算几何,暴力
http://codeforces.com/gym/101055/problem/A 题目:给定一些三维空间的点,要你找一个平面,能覆盖尽量多的点,只要求输出点数即可.n<=50 因为数据量小, ...
- Java面向对象_接口应用——策略模式
概念:定义了一系列的算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用它的客户应用而独立变化. 接口抽象的就是某种方法. OO设计原则:1.面向接口编程 2.封装变化 3.多用 ...
- 说说C#中的enum吧
enum,就是枚举类型,它是struct,int,single,double一样,都属于值类型,从ValueType类型中派生,存储在栈中.它在被创建时,不需要分配内在空间,所以对程序的性能是有好处的 ...