文件IO的相关函数

一、标准IO

概念:标准是指遵循AVSI C标准,标准IO实际上是通过标准C库里面的函数来完成的。

特点:标准IO内部实现了一种缓冲机制 标准IO通过利用缓冲机制,减少系统调用的次数来提高程序执行效率;

标准IO一般用于访问普通文件,它是在文件IO的基础上添加了缓冲机制。

二、流

概念:文件IO操作简单从文件输入和输出数据,称为字节流,也叫作流。

流的类型:

1、文本流

文本流处理数据都是以字符的方式处理

最终所有数据都会转换为对应的ASCII码值处理

"hello" == 'h' 'e' 'l' 'l' 'o'

"1234"  == '1' '2' '3' '4'   对应的ASCII码值:49  50  51  51

文本流和二进制流处理换行符方式不一样(Windows下面,linux下面没有区别)

文 本 流:'\n' == '\r' '\n' 13 10

二进制流:'\n' == '\n'

2、二进制流

二进制流处理数据都是以转换成二进制处理

"1234" == 100 1101 0010 //直接转成二进制流

三种特殊流:

stdin  -- 标准输入流 -- 0 (键盘)

stdout -- 标准输出流 -- 1 (终端)

stderr -- 标准错误流 -- 2

三、缓冲区

1、全缓存:当打开一个普通文件时,默认使用全缓存

特点:只有当缓冲区满或者空时才能进行实际的读写操作

2、行缓存:当打开操作的文件跟终端相关时,使用行缓存

特点:当行缓存遇到'\n'或者缓冲区满的情况下才做读写操作

3、无缓存:当需要输出打印错误结果时用无缓存

特点:

四、标准IO相关函数

{

fopen()/fclose()

fgetc()/fputc()

fgets()/fputs()

fread()/fwrite()

feof()/ferror()

ftell()/fseek()/rewind()

}

首先先提一下利用man查看函数的使用方法:

{

man 1:可执行程序和shell命令

man 2:系统调用函数

man 3:标准库函数

}

1、打开文件 

 fopen()

#include <stdio.h>//头文件

FILE *fopen(const char *path, const char *mode)//函数原型

参数:

path:打开的文件名(可包含文件路径)

mode:打开文件方式

r :以只读方式打开文件 -- 文件不存在,则无法打开文件,打开文件会清空文件内容

r+:以读写方式打开文件 -- 文件不存在,则无法打开文件,打开文件会清空文件内容

w :以只写方式打开文件 -- 文件不存在,则创建文件在打开,打开文件会清空文件内容

w+:以读写方式打开文件 -- 文件不存在,则创建文件在打开,打开文件会清空文件内容

a :以只写方式打开文件 -- 如果文件不能存在则会先创建,并在文件末尾追加输入内容

a+:以只写方式打开文件 -- 如果文件不能存在则会先创建,并在文件末尾追加输入内容//换行追加

返回值:成功返回流指针,失败返回-1;

举例:FILE *fp = fopen("1.txt", "r+");

2、关闭流

 fclose()

#include <stdio.h>//头文件

int fclose(FILE *fp)//函数原型

参数:关闭文件对应的流指针

返回值:成功返回0,失败返回-1.

举例:fclose(fp);

3、错误处理

errno:错误号

strerror()

(1) #include <string.h>

#include <errno.h>//需要添加头文件

char *strerror(int errnum)//函数原型

参数:

errno:错误号

返回值:

成功返回错误的字符串,失败返回"Ukown error!"

perror()

(2) #include <stdio.h>

void perror(const char *s);//比较常用

参数:

s:错误信息,随意填一个字符串

perror()//可以直接打印错误,不用添加头文件

举例:

if(NULL == fp)

{

// perror("open 1.txt.");

printf("%s\n",strerror(errno));

return -1;

}

4、按字节输入输出

fgetc()

#include <stdio.h>

int fgetc(FILE *stream)

功能:向指定流中输入单个字节

参数:

stream:对应的流指针

返回值:

成功:返回得到的字符

失败或者读到文件末尾:返回-1

fputc()

#include <stdio.h>

int fputc(int c, FILE *stream);

功能:向指定流中输出指定字符

参数:

c:要输出的字符

stream:指定的流指针

返回值:成功返回输出字符,失败或者读到文件末尾返回-1;

练习:

1、计算一个文件的大小

2、实现文件的复制

5、按行进行输入和输出

fgets()

#include <stdio.h>

char *fgets(char *s, int size, FILE *stream);

返回值:

成功返回得到输入字符串的首地址,失败返回NULL;

参数:

s:输入数据的首地址

size:输入一行数据的大小

stream:对应文件的流指针

注意:

fgets()输入时遇到'\n'结束

最大输入的字节数为(size-1)个

fputs()

#include <stdio.h>

int fputs(const char *s, FILE *stream);

参数:

s:输入数据的首地址

stream:对应文件的流指针

返回值:失败返回-1

练习:

1、计算文件的行数

2、实现文件的复制

6、按对象输入输出数据

fread()

void *表示可以传入任意类型的指针

#include <stdio.h>

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

参数:

ptr:存放读取内容的首地址

size:一个对象的字节数大小(一次读多大字节的对象)

nemmb:读取对象的个数

stream:对应文件的流指针

返回值:

成功返回读写的对象个数

fwrite()

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

参数:

ptr:存放写入内容的首地址

size:一个对象的字节数大小(一次写多大字节的对象)

nemmb:写入对象的个数

stream:对应文件的流指针

返回值:

成功返回读写的对象个数

7、判断错误流 -- feof、ferror

feof()

#include <stdio.h>

int feof(FILE *stream);

返回值:

返回1表示只读到文件末尾,0表示失败

ferror()

int ferror(FILE *stream);

返回值:

返回1表示错误退出,0表示失败

8、刷新流fflush()

#include <stdio.h>

int fflush(FILE *stream);

参数:

stream:流指针

返回值:

成功返回0,失败返回-1;

9、定位流(文件指针)

-- ftell / fseek / rewind

#include <stdio.h>

ftell()

long ftell(FILE *stream);

参数:

stream:流指针

返回值:

成功返回文件指针相对于文件开头的偏移量,失败返回-1

fseek()

int fseek(FILE *stream, long offset, int whence);

参数:

stream:流指针

offset:偏移量

whence:定位基准点

{

SEEK_SET:定位在文件开头

SEEK_CUR:定位在文件指针当前位置

SEEK_END:定位在文件末尾

}

流的定位等于:偏移量+基准点

rewind()

功能:

void rewind(FILE *stream);

将文件指针定位在文件开头

sprintf

10、获取时间

ctime

#include <time.h>

time(&t);

char *ctime(const time_t *timep);

time

time_t time(time_t *tloc);

返回值:

成功返回字符串

localtime

struct tm *localtime(const time_t *timep);

truct tm {

              int tm_sec;    /* Seconds (0-60) */

              int tm_min;    /* Minutes (0-59) */

              int tm_hour;  /* Hours (0-23) */

              int tm_mday;  /* Day of the month (1-31) */

              int tm_mon;    /* Month (0-11) */

              int tm_year;  /* Year - 1900 */

              int tm_wday;  /* Day of the week (0-6, Sunday = 0) */

              int tm_yday;  /* Day in the year (0-365, 1 Jan = 0) */

              int tm_isdst;  /* Daylight saving time */

          };

12、sprintf--补充

int sprintf(char *str, const char *format, ...);

参数:

str:输入数据的首地址

format:要写入str中的文本

练习:向文件中每隔一秒写入当前行数和时间

主要在于sprintf()的使用方法

第一天学习文件IO的笔记!!!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,295评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,928评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,682评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,209评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,237评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,965评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,586评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,487评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,016评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,136评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,271评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,948评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,619评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,139评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,252评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,598评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,267评论 2 358

推荐阅读更多精彩内容

  • 字符串: strstr(* s,*p) 返回值如果是字符串则是第一次出现 p的之后所有的字符串;若返回值为整形,则...
    Edingburgh阅读 462评论 0 1
  • 最近工作与读取、存储文件打交道比较多,特记录一下。 C 注意包含头文件:#include fopen 函数定义:F...
    卢天行阅读 249评论 0 0
  • 底层文件访问 open系统调用 在遵循POSIX规范的系统上,使用open系统调用并不需要包含头文件sys/typ...
    Select_Ep阅读 1,477评论 1 3
  • 姓名:谢焕彬 学号:19020100303一、文件与文件类型1、文件定义定义:文件(File)是一个具有符...
    最帅气的CR7阅读 339评论 0 0
  • 首先介绍下自己的背景: 我11年左右入市到现在,也差不多有4年时间,看过一些关于股票投资的书籍,对于巴菲特等股神的...
    瞎投资阅读 5,732评论 3 8