Linux 文件流管理
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 文件流管理的更多相关文章
- Linux 文件权限管理
1.文件权限的概述 在Linux系统下,使用权限来保护资源的安全将是一种不错的选择.系统中每个文件的权限都有可读(r).可写(w)和可执行(x)这三种权限,它们分别对应权限数值4.2 和1.系统为每个 ...
- Linux - 文件基本操作管理
文件基本操作管理 复制文件和目录 格式: Cp 源文件(文件夹) 新目标文件名(文件夹) 相同目录下,指定文件名. 不同目录下,不需要指定文件名. 参数: –r:递归复制整个目录树. –v:再复制 ...
- 《linux文件权限管理大总结》RHEL6
在linux系统下文件的权限通常会以下面的格式显示出来: Chmod文件权限: 权限的管理chmod -a 所有的权限 -u 文件所有者的权限 -g 组权限 -o 其他用户的权限 可以使用运算符来设 ...
- Linux文件的管理
创建:touch vim/vi echo重定向 cat touch 管理: atime mtime touch 文件名 //如果文件不存在,不创建文件 删除:mv /tmp find |x ...
- 一个故事看懂Linux文件权限管理
前情回顾: 我通过open这个系统调用虫洞来到了内核空间,又在老爷爷的指点下来到了sys_open的地盘,即将开始打开文件的工作. 详情参见:内核地址空间大冒险:系统调用 open系统调用链 我是一个 ...
- Linux文件权限管理(持续更新)
文章是从我的个人博客上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com 以root身份登录linux以后, ls -al 可以看到 -rw-rw-r-- 1 wangzhe ...
- Linux文件基本操作管理
这一篇总结Linux系统中文件和目录的创建,复制,移动和重命名,包括删除这些最常用的操作. 创建 1,创建目录 使用命令:mkdir 实践:在根目录下创建一个目录命名为mcgrady 2,创建文件 使 ...
- Linux 目录流管理
目录 1. 打开/关闭文件 1). 打开目录 / opendir 2). 关闭文件 / fclose 2. 读/写目录流 1). 目录流-读 / readdir & readdir_r 3. ...
- Linux 文件IO管理 - POSIX
以下是对POSIX的简短解释: POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX标准定义了操 ...
随机推荐
- navicat远程连接oracle
本机没有oracle,这个软件太大了. 想要远程连接oracle,本地不安装oracle的话是不行的,我们安装一个oracle instance client,然后配置navicat就ok了. 下载i ...
- linux系统编程之错误处理:perror,strerror和errno
1,在系统编程中错误通常通过函数返回值来表示,并通过特殊变量errno来描述. errno这个全局变量在<errno.h>头文件中声明如下:extern int errno; errno是 ...
- C#文件监控对象FileSystemWatcher实例,通过监控文件创建、修改、删除、重命名对服务器数据进行实时备份
先上图,简单的windorm界面:此为最初的版本,后续会增加监听多个源目录的功能.log功能.进度条展示功能等. 1.初始化监听 /// <summary> /// 初始化监听 /// & ...
- Unity的Shader如何控制投影颜色
细节慢慢补充,有几个需要注意的地方,必须要有接收投影的pass也就是Name是ShadowCollector的,必须添加#pragma multi_compile_fwdbase,物体的着色器必须有T ...
- day 93 Restframwork
苑昊博客: http://www.cnblogs.com/yuanchenqi/articles/7570003.html 一.queryset 特性 from django.db import m ...
- IOS - IPhone或IPAD,如何恢复出厂操作系统?
IPhone或IPAD的操作系统都是IOS,如果IPhone或IPAD越狱,或其它原因导致不能正常使用了,恢复出厂设置能够得到一个可以正常工作的设备.恢复的方法也比较简单,就是用iTunes,一般情况 ...
- nginx请求频率限制模块ngx_http_limit_req_module
模块: ngx_http_limit_req_module 作用: 限制客户端请求频率,防止恶意攻击 配置示例: http { limit_req_zone $binary_remote_addr z ...
- 克隆linux虚拟机
背景:有时候,我们在用虚拟机的时候会用到多个进行使用.重新安装会花费大量的时间,此时,我们可以通过vmware虚拟机自带的功能快速克隆出完全相同的系统. 前提:被克隆的虚拟机系统要处于关闭状态 步骤: ...
- 【wireshark】插件开发(二):Lua插件开发介绍
1. Wireshark对Lua的支持 本节相关内容可参考Wireshark开发指南第10章”Lua Support in Wireshark”. Wireshark集成了Lua解释器,以支持Lua脚 ...
- oracle case when 语句的用法详解
1. CASE WHEN 表达式有两种形式 复制代码代码如下: --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他 ...