标准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”

你可能感兴趣的:(IO)