一、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”