Linux下普通IO文件操作函数---C语言
普通文件IO总结
FILE结构体
typedef struct
{
int level; /*填充/清空一级缓存*/
unsigned flag; /*文件状态指针*/
char fd; /*文件描述符*/
unsigned char hold; /*ungetc char if no buffer*/
int bsize; /*缓存区大小*/
unsigned char *buffer; /*数据缓冲区*/
unsigned char *curp; /*当前活动指针*/
unsigned istemp; /*临时文件指示器*/
short token; /*用于有效性检查*/
}FILE;
打开文件fopen函数
文件指针名=fopen(文件名,使用文件方式)
eg:
FILE *fp; //文件指针
fp=("file a","r"); //以只读方式打开hzk16
打开方式有:
| 描述符 | 意义 |
|---|---|
| “rt” | 只读打开一个文本文件,只允许读数据 |
| “wt” | 只写打开或建立一个文本文件,只允许写数据 |
| “at” | 追加打开一个文本文件,并在文件末尾写数据 |
| “rb” | 只读打开一个二进制文件,只允许读数据 |
| “wb” | 只写打开或建立一个二进制文件,只允许写数据 |
| “ab” | 追加打开一个二进制文件,并在文件末尾写数据 |
| “rt+” | 读写打开一个文本文件,允许读和写 |
| “wt+” | 读写打开或建立一个文本文件,允许读写 |
| “at+” | 读写打开一个文本文件,允许读,或在文件末追加数 据 |
| “rb+” | 读写打开一个二进制文件,允许读和写 |
| “wb+” | 读写打开或建立一个二进制文件,允许读和写 |
| “ab+” | 读写打开一个二进制文件,允许读,或在文件末追加数据 |
fopen若过出错则,返回一个NULL可以用作错误异常处理的判断条件;
fclose函数
用于关闭当前文件 fclose(FILE*);返回值为0表示正确,非零错误。
文件读写操作:
·字符读写函数 :fgetc和fputc ·字符串读写函数:fgets和fputs ·数据块读写函数:freed和fwrite ·格式化读写函数:fscanf和fprinf
fgetc(FILR*)与fputc(const char,FILE*)/fputc(char,FILE*):
fgetc每次在文件中读一个字节,每读一次文件内的字符指针往后挪一位,可多次重复使用依此读出文件内容。
fput函数每次写入一个字符,每写一次文件内指针向后挪动一位,可多次连续使用写入。
fgets(char* buf, int n, FILE*)与fputs(char* buf, FILE*):
从文件中读出 n-1 个字符放入buf中
fputs将字符串写入文件中
fread(cahr* buf, int size, int count,FILE* fp)与fwrite(char* buf, int size, int count,FILE* fp)
fread 从fp中读入conut个size长度的字符串到buf中
fwirte从buf中读出count个size个长度的字符串到fp中
fscanf(FILE*, 格式, 列表)和 fprintf(FILE*, 格式, 列表)
eg:
fprintf(fp,"%s %d %d %s",pp->name,pp->num,pp->age,pp->addr);
fscanf(fp,"%s %d %d %s",qq->name,&qq->num,&qq->age,qq->addr);
rewind(FILE*)
将文件内部指针移到文件首
fseek(FILE* fp,int count,int startpoint)
fp 文件指针
count 位移量,表示从startpoint开始计算位移量
startpoint有三种形式:
| 起始点 | 表示符 | 值 |
|---|---|---|
| 首 | SEEK—SET | 0 |
| 当前 | SSEEK-CUR | 1 |
| 尾 | SSEEK-END | 2 |
设置bu模式函数
#include <stdio.h>
void setbuf(FILE *stream, char *buf);
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
void setbuffer(FILE *stream, char *buf, size_t size);
void setlinebuf(FILE *stream);
setbuf 与 setvbuf 指定缓冲区(在读写文件之前),将不再使用系统默认的缓冲区
setbuf(fp, NULL) 使得文件不带缓冲区
setbuf(ffp , NULL, _IONBF , 0 ) 在此情况下与setbuf(fp, NULL)相同
setbuf 中参数:
stream表示操作文件;
buf 缓冲区,;
mode 模式;
size 大小。
setbuffer函数
此函数与setbuf函数类似,好在可自定义buf的大小
setlinebuf函数
此函数等价于setvbuf(fp, (char *) NULL, _IOLBF, 0);
小点:
stdin 0 标准输入
stdout 1 标准输出
stderr 2 标准错误
_IONBF 无缓冲
_IOLBF 行缓冲
_IOFBF 全缓冲
_IO_LINE_BUF 行缓冲
_IO_UNBUFFERED 无缓冲
对IO普通文件操作整理,有错误请指出;
参考:http://www.cnblogs.com/whiteyun/archive/2009/08/08/1541822.html
Linux下普通IO文件操作函数---C语言的更多相关文章
- Linux C 文件操作函数(~上善止水~)
翻翻笔记,整理一下 C 语言中的文件操作函数 ~~~~~~,多注意细节,maybe 细节决定成败~ 1. fopen /* fopen(打开文件) * * 相关函数 open,fclose * * 表 ...
- Linux C 下的大文件操作
这里说的大文件指大小超过4G的文件. 在32位环境下,linux默认打开.读.写超过4G的文件会返回错误.定义如下宏可以突破这个限制,对read/write和fread/fwrite同时有效. 注意它 ...
- 查看Linux下*.a库文件中文件、函数、变量
查看Linux下*.a库文件中文件.函数.变量等情况在Linux 下经常需要链接一些 *.a的库文件,那怎么查看这些*.a 中包 含哪些文件.函数.变量: 1. 查看文件:ar -t xxx.a 2. ...
- C语言文件操作函数
C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * str ...
- 【转载】在Linux下,一个文件也有三种时间,分别是:访问时间、修改时间、状态改动时间
在windows下,一个文件有:创建时间.修改时间.访问时间.而在Linux下,一个文件也有三种时间,分别是:访问时间.修改时间.状态改动时间. 两者有此不同,在Linux下没有创建时间的概念,也就是 ...
- linux 下各个头文件的作用[典]
linux 下各个头文件的作用 2.6.30.4的头文件的位置和2.6.25.8的不一样,除去内核源码下的include目录外, 在arch/arm/mach-s3c2410/和arch/arm/ ...
- C语言文件操作函数大全(超详细)
C语言文件操作函数大全(超详细) 作者: 字体:[增加 减小] 类型:转载 本篇文章是对C语言中的文件操作函数进行了详细的总结分析,需要的朋友参考下 fopen(打开文件)相关函数 open,fc ...
- linux下的IO模型---学习笔记
1.linux文件系统和缓存 文件系统接口 文件系统-一种把数据组织成文件和目录的存储方式,提供了基于文件的存取接口,并通过文件权限控制访问. 存储层次 文件系统缓存 主存(通常时DRAM)的一块区域 ...
- Linux下的IO监控与分析
Linux下的IO监控与分析 近期要在公司内部做个Linux IO方面的培训, 整理下手头的资料给大家分享下 各种IO监视工具在Linux IO 体系结构中的位置 源自 Linux Performan ...
随机推荐
- idea 优先引用项目代码,而非jar包
1.现有项目,和jar包源码在同一层目录 2.idea直接打开ccccc,右键a,b两个文件中的pom.xml加入maven project,如下: 执行1,2 步骤,在b中引入a,刚引入a在最下方, ...
- springboot连mysql报一个奇怪的错误
错误提示:Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection ...
- Redis简单入门
什么是Reids 就是一个数据库,将数据保存在内存中 优点 支持数据持久化 支持丰富的数据类型 (字符串,哈希,列表,集合) 和Me的区别:Me是简单版的Redis,Me不支持持久化.Me仅仅支持字符 ...
- python 学习第一天
第一天接触python,首先感谢老男孩的授课老师!!!! 今天的知识点: 1.首先接触到python的第一个模块getpass(这边有点迷茫,不能确定的是这个getpasss是一个库还是一个模块)ge ...
- myeclipse破解软件(jar包分析)
cracker.jar 第root层com 第1层crack 第二层me-->active 第4层ui 第5层find 第5层replace 第6层stream 第5层writer 第1层gen ...
- JAVA的单元测试技术
1.选定开发工具 选定eclipse为开发工具,用JAVA进行编程,实现此次测试. 2.编写需要被测试的java类 此次我们以顺序查找与二分查找法为例. package com.mycode.tuil ...
- iOS解决cell重用问题
在写sina 微博界面的过程中使用到了cell,那么就是在cell上添加一些控件,但是由于每条微博的内容都是不同的,所以在显示的过程中,出现了内容重叠的问题,其实就是UITableViewCell重用 ...
- spring boot 接口返回值去掉为null的字段
现在项目都是前后端分离的,返回的数据都是使用json,但有些接口的返回值存在 null或者"",这种字段不仅影响理解,还浪费带宽,需要统一做一下处理,不返回空字段,或者把NULL转 ...
- 关于jfinal发送邮件走过的坑
最近接到一个写发送邮件的功能开发,使用的是jfinal框架.原本打算使用javamail一步步来的,后来看到jfinal有自带的发邮件的插件(jfinal-mail-plugin),只需两三行代码便可 ...
- python3 十六进制字符串进行分割并累加
最近忘性大,记录一下 需求: ‘80 11 F1 01 1A’字符串需要把每一个十六进制字符加起来,即80+11+F1+01+1A=? 很简单,不解释,直接上 hex(sum([int(i,16) f ...