系统编程 --- Day02 IO篇

作业

 

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值