作业
IO
标准IO相关函数和结构体
FILE结构体
struct _IO_FILE{ int _flags; char *_IO_read_ptr; //当前读指针 char *_IO_read_end; //当前区域的尾部 char *_IO_read_base;//读文件开始 char *_IO_write_base;//写文件开始 char *_IO_write_ptr;//当前写指针 char *_IO_write_end;//当前区域的尾部 char *_IO_buf_base;//缓冲区头 char *_IO_buf_end;//缓冲区尾 char *_IO_save_base; char *_IO_backup_base; char *_IO_save_end; struct _IO_marker *_makers; struct _IO_FILE *_chain int _fileno;//文件描述符 } struct _IO_FILE { int _flags; /* High-order word is _IO_MAGIC; rest is flags. */ #define _IO_file_flags _flags /* The following pointers correspond to the C++ streambuf protocol. */ /* Note: Tk uses the _IO_read_ptr and _IO_read_end fields directly. */ char* _IO_read_ptr; /* Current read pointer */ char* _IO_read_end; /* End of get area. */ char* _IO_read_base; /* Start of putback+get area. */ char* _IO_write_base; /* Start of put area. */ char* _IO_write_ptr; /* Current put pointer. */ char* _IO_write_end; /* End of put area. */ char* _IO_buf_base; /* Start of reserve area. */ char* _IO_buf_end; /* End of reserve area. */ /* The following fields are used to support backing up and undo. */ char *_IO_save_base; /* Pointer to start of non-current get area. */ char *_IO_backup_base; /* Pointer to first valid character of backup area * char *_IO_save_end; /* Pointer to end of non-current get area. */ struct _IO_marker *_markers; struct _IO_FILE *_chain; int _fileno; }
fopen:打开一个文件并且在用户空间申请一片缓冲区
原型: #include <stdio.h> FILE *fopen(const char *pathname, const char *mode); 参数: char *pathname:需要传入指定文件的路径以及名字; char *mode: r 以读的方式打开文件,如果要读取数据,则从文件开头开始读取 如果文件不存在,则函数运行失败; r+ 以读写方式打开文件,如果要读写取数据,则从文件开头开始读写 如果文件不存在,则函数运行失败; w 以写的方式打开文件。如果要写入数据,则从文件开头开始写入; 如果文件不存在,则创建文件; 如果文件存在,则清空文件; w+ 以读写的方式打开文件。如果要读写取数据,则从文件开头开始读写; 如果文件不存在,则创建文件; 如果文件存在,则清空文件; a 以追加写的方式打开文件. 如果要写入数据,则从文件结尾开始写入; 如果文件不存在,则创建文件; 如果文件存在,以追加的方式写入 a+ 以读和追加写的方式打开文件. 如果文件不存在,则创建文件; 如果文件存在,流的初始位置:以读的方式,则初始位置在文件开头 以写的方式,则初始位置在文件结尾; 返回值: 成功,返回FILE*类型 失败,返回NULL,更新errno(错误码); 不同的错误,errno不同 /usr/include/asm-generic errno.h errno-base.h
fclose:关闭文件,同时释放缓冲区等其他资源,关闭文件描述符
功能:关闭文件,同时释放缓冲区等其他资源; (关闭文件描述符) 原型: #include <stdio.h> int fclose(FILE *stream); 参数: 返回值: 成功,返回0; 失败,返回EOF,更新errno;
fputc:将当个字符输出到指定的文件中
原型: #include <stdio.h> int fputc(int c, FILE *stream); int putchar(int c); putchar('a'); putchar(97); putchar(10); 参数: FILE *stream:指定要将字符输出到哪个文件中,填上对应的流指针; int c:指定要输出的字符对应的整型形式,或者字符形式; 返回值: 成功,返回成功输出的字符对应的整型形式; 失败,返回EOF;
fgetc:从指定文件中读取数据
原型: #include <stdio.h> int fgetc(FILE *stream); int getchar(void); char c = getchar(); 参数: FILE *stream:指定要从哪个文件中读取数据; 返回值: 成功,返回成功读取到的字符对应的整型形式; 失败或者文件读取完毕,返回EOF;
fputs:将字符串输出到指定的文件中,不会自动补齐\n
原型: #include <stdio.h> int fputs(const char *s, FILE *stream); int puts(const char *s); puts(str); 参数: const char *s:指定要输出的字符串的首地址; FILE *stream:指定要输出到哪个文件中; 返回值: 成功,返回非负数; 失败,返回EOF
fgets:从指定的文件中获取字符串,读取完\n后停止,遇到EOF也停止,读取完毕后会在读取的有效字符后面自动补充\0
char *fgets(char *s,int size,FILE *stream); //参数: s:存储获取到的字符串 // size:指定一次最多获取多少个数据 size-1 // stream:从哪个文件中获取,文件流指针 //返回值:成功,返回存储获得数据的首地址 失败或者读到文件结尾返回NULL,不更新errno
fprintf:以格式化将数据输出到指定的文件中
int fprintf(FILE *stream,const char *format,...); //参数:stream:被输入的文件的文件流指针 // format:格式化字符串 // ...:不定参数 //返回值:成功返回输出字符个数 失败返回负数
fscanf:从指定的文件中以格式化获取数据
int fscanf(FILE *stream , const char *format,...); //参数:stream:文件流指针 // format:格式化字符串 // ...:不定参数 //返回值:成功返回输出字符个数 失败返回负数
fwrite:将数据以二进制的形式写入到指定文件
int fwrite(const void *ptr,size_t size , size_t nmemb,FILE *stream); //参数:ptr:任意类型的指针,存放要写入的数据,数据类型不限 // size:每个数的大小 // nmemb:指定要输出的数据个数 // stream:文件流指针 //返回值:成功返回要输出的数据个数 失败返回小于指定个数或者0
fread:从指定的文件中以二进制的形式读取数据
int fread(const void *ptr,size_t size,size_t nmemb,FILE *stream); //参数:ptr:任意类型的指针,存放要写入的数据,数据类型不限 // size:每个数的大小 // nmemb:指定要读取的数据个数 // stream:文件流指针 //返回值:成功返回要读入的数据个数 失败返回小于指定个数或者0
fseek:修改文件偏移量
int fseek(FILE *stream , long offset , int whence); //参数:stream:文件流指针 // offset:偏移量 // whence:开始端 // SEEK_SET文件头 // SEEK_CUR当前指针位置 // SEEK_END文件尾 //返回值:成功返回偏移量 失败返回-1,更新errno
ftell:获取当前距离文件开头的偏移量
long ftell(FILE *stream); //参数:stream:文件流指针 //返回值:成功返回当前光标距离文件头的偏移量 失败返回-1,更新errno
feof:判断是否是文件末尾
int feof(FILE *stream); //参数:文件流指针 //返回值:指针在文件末尾为真 否则为假
ferror:判断是否文件访问出错
int ferror(FILE *stream); //参数:文件流指针 //返回值:访问文件出错为真 否则为假
时间相关函数
struct tm
struct 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) */ 月=tm_mon+1 int tm_year; /* Year - 1900 */ 年=tm_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 */ };
time:获取1970-1-1至今的秒数
time_t time(time_t *tloc); //参数:tloc:存储获得的秒数 //返回值:成功返回获取到的秒数 失败返回-1 更新errno
localtime:将秒数转换成日历格式
struct tm*localtime(time_t *timep); //参数:timep:指向存储秒数的空间的指针 //返回值:成功返回tm结构体类型的指针,失败返回NULL更新errno
文件IO
open:打开指定路径下的文件,获取其文件描述符
int open(const char *pathname , int flags , ...); //参数:pathname:文件路径 // flags:打开文件方式 // O_RDONLY只读 // O_WRONLY只写 // O_RDWR读写 // O_CTREAT创建的形式 // O_TRUNC清空的形式 // O_APPEND追加的形式 // O_EXCL判断是否存在,存在则报错 // ...:如果打开方式由创建形式,需要写第三个参数,文件权限 mode&(~umask) //返回值:成功返回文件描述符 ,失败返回-1更新errno