标准IO

 

一、IO

 

标准IO:通过文件指针访问文件(stdin stdout stderr)。带缓存

文件IO:通过文件描述符访问文件(0, 1, 2)。支持对各种文件进行读写操作

 

文件指针: FILE *

文件描述符:int

 

 

 

二、三种缓存

 

(1)行缓冲:对于终端操作采用的缓冲区

缓存区大小: 1024字节(1K)

刷新缓存 :程序正常结束、缓存区满、 ’\n’ 、使用fflush函数

 

(2)全缓冲:对于文件操作采用的缓冲区

缓存区大小:4096字节(4K)

刷新缓存 :程序正常结束、缓存区满、使用fflush函数

 

(3)无缓冲:对于终端操作采用的缓冲区

标准出错(stderr)

 

 

 

三、标准IO

 

打开 访问 关闭

fopen fprintf fclose

 

 

 

四、fopen函数

 

FILE *fopen(const char *path, const char *mode);

功能:打开一个文件,获得该文件的文件指针,用以接下来的标准IO访问

返回:成功返回文件指针,失败返回NULL

参数:path:文件的路径及名字

mode:打开模式

r 只读,不创,从开始读

r+ 读写,不创,覆盖模式

w 只写,创建,清空模式

w+ 读写,创建,清空模式

a 只写,创建,追加模式

a+ 读写,创建,追加模式

 

 

 

五、fprintf函数

 

int fprintf(FILE *stream, const char *format, ...);

参数:format与printf完全一样

 

 

六、fclose函数

 

int fclose(FILE *fp);

关闭一个文件(流)

 

 

 

七、fgetc函数

 

int fgetc(FILE *stream);

功能:读取接下来的一个字符

参数:文件指针

返回:读取到的字符的ASCII码,读到文件末尾失败EOF(-1)

 

 

八、fputc函数

 

int fputc(int c, FILE *stream);

功能:向stream文件写一个字符c

返回:成功返回写入字符的ASCII码,失败返回EOF(-1)

 

 

 

九、fgets函数

 

 

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

功能:从stream文件期望读取size个字符,保存在s内

返回:成功返回s,失败或EOF返回NULL

注意:1、至多读取size-1个字符

2、遇到‘\n’或‘EOF’停止读取,并且换行符也会被读取

3、读取的末尾自动加‘\0’字符

 

 

 

十、fputs函数

 

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

功能:将s字符串写到stream文件内

返回:失败返回EOF(-1)

注意:遇到‘\0’字符结束输出

 

 

 

十一、fread函数

 

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

功能:从stream文件中读取nmemb项数据存到ptr,每一项数据size大小

返回:读取成功的完整项数,读到EOF或失败返回0

注意:size使用单位字节大小

 

 

 

 

十二、fwrite函数

 

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

功能:将ptr里的数据写nmemb项到stream文件中,每项size大小

返回:写入成功的完整项数

 

 

 

十三、fseek函数

 

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

功能:改变文件的读写位置

参数:offset:偏移量与whence相加,以字节为单位

whence:相对位置

SEEK_SET(文件的开始):从文件开头移动offset个字节

SEEK_CUR(当前位置):从当前位置移动offset个字节

SEEK_END(最后一个字符的下一个位置):从文件末尾移动offset个字节

从开头不能往左移,从末尾不能往右移

 

注意:以“a”追加模式打开的文件,修改不了写的位置

 

fseek(fp,0,SEEK_SET);在开头偏移0个字节,回到开头

fseek(fp,100,SEEK_SET);在开头偏移100个字节

 

fseek(fp,0,SEEK_CUR);在当前位置偏移0个字节

fseek(fp,100,SEEK_CUR);在当前位置向右偏移100个字节

fseek(fp,-100,SEEK_CUR);在当前位置向左偏移100个字节

 

fseek(fp,0,SEEK_END);在结尾位置偏移0个字节,移动到最后

十四、time函数

 

time_t time(time_t *t);

功能:获取当前的时间(秒数)

 

struct tm *localtime(const time_t *timep);

功能:将time_t转换成结构体形式的日历时间

 

struct tm {

int tm_sec; /* seconds */

int tm_min; /* minutes */

int tm_hour; /* hours */

int tm_mday; /* day of the month */

int tm_mon; /* month */

int tm_year; /* year */

int tm_wday; /* day of the week */

int tm_yday; /* day in the year */

int tm_isdst; /* daylight saving time */

};

 

 

 

Windows平台的文本换行符为“”\r\n“”

Linux平台的文本换行符为“\n”

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值