常用的IO接口函数
标准IO:fprint、fscanf、fputc、fgetc、fputs、fgets、fread、 fwrite、fopen、fclose、fseek、ftell、rewind。。。
文件IO:open、close、read、write、seek。。。
SEEK_SET: 文件头部
SEEK_END: 文件结束, EOF
SEEK_CUR: 当前位置
默认开启的:
stdin:标准输入指针(终端输入)
stdout:标准输出指针
stderr:标准出错指针
文件打开的方式,需要以以下字符开头的字符串
r 以只读的形式打开文件,文件光标定位在开头.如果文件不存在,则报错
r+ 以读写的形式打开文件,文件光标定位在开头.如果文件不存在,则报错 w 以只写的形式打开文件,如果文件存在,则清空文件内容,如果文件不存在,则创建该文件,文件光标定位在开头.
w+ 以读写的形式打开文件,如果文件存在,则清空文件内容,如果文件不存在,则创建该文件,文件光标定位在开头.
a 以追加的形式打开文件,如果文件不存在则创建文件,文件光标定位在结尾
a+ 以读或者追加的形式打开文件,如果文件不存在,则创建文件,如果第一次是读数据,则光标定位在开头,否则定位在结尾
返回值:成功调用返回打开的文件地址,失败返回NULL,并置位错误码
全缓存:有关普通文件指针对应的缓冲区,其大小位4096字节
向文件写的
全缓存的大小为:4096
2、程序结束后,会自动刷新全缓存
3、当文件指针关闭后,会刷新全缓存
4、当使用fflush函数刷新文件指针时,会刷新全缓存
5、当输入输出切换时,会刷新全缓存
6、当缓存区满了后,再放数据时,会刷新全缓存
行缓存:有关标准输入、标准输出指针对应的缓冲区
往终端写的
行缓存的大小为:1024
1、换行会刷新行缓存
2、程序结束后,会自动刷新行缓存
3、当文件指针关闭后,会刷新行缓存
4、当使用fflush函数刷新文件指针时,会刷新行缓存
5、当输入输出切换时,会刷新行缓存
6、当缓存区满了后,再放数据时,会刷新行缓存
不缓存:不缓存的大小为:0
fgets(buf, sizeof(buf), stdin); //从终端读取数据到buf中
buf[strlen(buf)-1] = '\0'; //将回车换成 '\0' 用于识别或对比
time_t time(time_t *tloc);系统时间函数
使用方式:time_t sys_time = time(NULL);
#include <myhead.h>
#include <time.h>
int main(int argc, const char *argv[])
{
//定义变量存储秒数
time_t sys_time = time(NULL);
//将秒数转换为结构体
struct tm *time_ptr = localtime(&sys_time);
char buf[128] = ""; //存放转变后的字符串
sprintf(buf, "%4d-%2d-%2d %2d:%2d:%2d\n",
time_ptr->tm_year + 1900,
time_ptr->tm_mon + 1,
time_ptr->tm_mday,
time_ptr->tm_hour,
time_ptr->tm_min,
time_ptr->tm_sec);
printf("时间: %s\n", buf);
return 0;
}
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:对文件进行模块化读写操作
参数1:要写入(存放数据)数据的起始地址(写入字符串的变量名)
参数2:每一项的大小
参数3:总的项数
参数4:文件指针
返回值:成返回读取的项数值,失败返回小于项数的值
注意:fread并不能区分是文件结束了,还是因为出现错误了,需要使用feof或ferror来区分
//可以直接写入结构体到文件
Stu s[3] = {{1001, "大狗", 30, 98}, \
{1002, "二狗", 25, 100}, \
{1003, "天明", 23, 80}};
//将这三名学生信息写入文件中
fwrite(s, sizeof(Stu), 3, fp);
读取也可以
fread(&temp, sizeof(temp), 1, fp);
printf("学号:%d, 姓名:%s,年龄:%d,成绩%.2lf\n",\
temp.numb, temp.name, temp.age, temp.score);
文件IO
特殊的文件描述符:0、1、2,分别对应了标准输入、标准输出、标准出错
stdin->_fileno ===> 0 ===> STDIN_FILENO
stdout->_fileno ===> 1 ===> STDOUT_FILENO
stderr->_fileno ===> 2 ===> STDERR_FILENO
文件打开标识 必须包含以下三者之一:
O_RDONLY:以只读的形式打开文件
O_WRONLY:以只写的形式打开文件
O_RDWR:以读写的形式打开文件
以下的可以选择性加入,使用位或完成:
O_CREAT:如果文件存在,就直接打开,如果文件不存在,则创建文件,此时,参数3必须要加,表示创建的文件权限
O_TRUNC:表示清空文件内容
O_APPEND:以追加的形式打开文件
O_EXCL:确保打开的是不存在的文件,通常跟O_CREAT一起使用,表示本次操作必须创建新文件,如果文件存在,则open函数报错,错误码为:EEXIST
"r":O_RDONLY
"r+":O_RDWR
"w":O_WRONLY|O_CREAT|O_TRUNC
"w+":O_RDWR|O_CREAT|O_TRUNC
"a":O_WRONLY|O_APPEND|O_CREAT
"a+":O_RDWR|O_APPEND|O_CREAT
mode :
普通文件权限一般为:0664 目录文件权限一般为:0775
lseek(fd, 0, SEEK_END)返回值是文件大小(long)