标准IO和文件IO

        在说IO之前先补充几个常见的命令:

1.od -c:按照字符编码显示文件内容,od -c filename

2.find:在指定路径下查找文件名,find 路径 -name 文件名

3.压缩、解压.tar.bz2文件:

        ①压缩:tar -jcvf 文件名 .tar.bz2 文件夹 /*

        ②解压:tar -jxvf 文件名 .tar.bz2

4.du:获得指定目录下文件的大小,du -k文件夹(按照kb获取大小);du -m 文件夹(按照mb获取大小)

5.makefile:

        ①它是一个工程管理工具

        ②用户多文件编程中指定代码的编译规则。

        ③使用方法是进入到工程目录中,输入make,注意要有makefilen文件

这样就可以把 你想要的文件在这里面用命令关联起来,想要编译的时候只需要输入make就编译了。

一、标准IO

        1.fputc函数:int fputc(int c, FILE *steam);这个函数是用来向文件中写入一个字符,成功返回写入字符的ASCII码值,失败返回EOF(-1)

        2.fgetc函数:int fgetc(FILE *steam);这个函数是用来从文件中读取一个字符,成功返回写入字符的ASCII码值,失败返回EOF(-1)

        3.fopen函数:FILE  *fopen(const char *pathname, const char *mode);这个函数是用来打开一个文件获得文件流指针,第一个参数是路径,第二个是打开方式。打开方式又分为只读打开‘r', 读写打开‘r+’,只写‘w’, 还有写读‘w+’,写会默认覆盖掉之前的内容,追加只写打开‘a’,追加读写打开‘a+’。这个函数成功返回文件流指针,失败返回NULL。

        4.fclose函数:int fclose(FILE *steam);这个函数是将文件流指针关闭,成功返回0,失败返回EOF。

        5.fgets函数:char *fgets(char *s, int size, FILE  *stream);这个函数是从文件中读取一段字符(遇到\n会立即停止),成功返回存放字符串空间的首地址,失败或读到文件末尾返回NULL。

        6.fputs函数:int fputs(const char *s, FILE *stream);这个函数是将字符串写入到文件中,成功返回非负数,失败返回EOF。

        7.fread函数:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *steam);这个函数是从流中读取nmemb个对象,每个对象size个字节,存放到ptr指向的空间中,成功返回实际读到对象的个数,失败返回,读到文件末尾返回0。

        8.fwrite函数:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *steam);这个函数是向文件中写入nmemb个对象,每个对象size个字节,存放到ptr指向的空间中,成功返回实际读到对象的个数。

        9.fseek函数:int fseek(FILE *stream, long offset, int whence);这个函数是用来设置流的偏移量的,成功返回0,失败返回-1。offset是偏移量,大于0向后偏移,小于0向前偏移。whence:系统默认宏里面定义的。SEEK_SET 文件开头;SEEK_END 文件末尾;SEEK_CUR 当前位置。

        10.rewind函数:void rewind(FILE *stream);将流重定位到开头

        11.ftell函数:long ftell(FILE *stream);获取流当前的偏移量。

        12.fscanf函数:int fscanf(FILE *stream, const char *format, ...);这个函数是格式化获取文件内容的,成功返回读取的数据,出错或者到结尾返回EOF。

        13.fprintf函数:int fprintf(FILE *stream, const char *format, ...);这个函数是格式化写入文件内容的。

        14.特殊的流:①stdin:标准输入流 ②stdout:标准输出流 ③stderr:出错流。

二、文件IO

  1.操作方式:
        1.打开文件          open
        2.读写文件          read/write 
        3.关闭文件          close
    2.man手册章节:
        1.标准命令
        2.系统调用
        3.库函数
        4.设备说明
        5.文件格式
        6.娱乐
        7.杂项
        8.管理员命令

3.函数接口使用:
        man 2 open 
        1.open 
        int open(const char *pathname, int flags);
        int open(const char *pathname, int flags, mode_t mode);
        功能:
            打开文件获得操作文件的文件描述符(很小、非负整数)
        参数:
            pathname:要打开文件的路径
            flags:打开的方式
                O_RDONLY        只读
                O_WRONLY        只写
                O_RDWR          读写 
                O_APPEND        追加
                O_ASYNC         异步IO
                O_CREAT         创建
                O_EXCL          检测文件是否存在
                O_NONBLOCK      非阻塞IO
                O_TRUNC         截断(清0)
        返回值:
            成功返回文件描述符
            失败返回-1 
        文件描述符范围: 0 - 1023 
        0: stdin  标准输入
        1: stdout 标准输出
        2: stderr 标准出错    
        文件描述符产生规律:
            1.范围 0 - 1023
            2.总是取尚未被占用的最小的非负整数 
        rwx rwx rwx
        110 100 100 
        6   4   4
        使用文件IO来实现标准IO打开文件的特性
        "r"     ->      O_RDONLY
        "r+"    ->      O_RDWR
        "w"     ->      O_WRONLY | O_CREAT | O_TRUNC, 0664 
        "w+"    ->      O_RDWR | O_CREAT | O_TRUNC, 0664 
        "a"     ->      O_WRONLY | O_CREAT | O_APPEND, 0664
        "a+"    ->      O_RDWR | O_CREAT | O_APPEND, 0664
        2.close 
          int close(int fd);
          功能:
            关闭文件描述符
        3.write
          ssize_t write(int fd, const void *buf, size_t count);
          功能:
            向文件中写入数据
          参数:
            fd:文件描述符
            buf:写入数据存放的空间首地址
            count:实际写入字节数
          返回值:
            成功返回实际写入字节数
            失败返回-1 
        4.read
          ssize_t read(int fd, void *buf, size_t count);
          功能:
            从文件中读取数据
          参数:
            fd:文件描述符 
            buf:存放数据空间首地址
            count:想要读取的数据字节数
          返回值:
            成功返回实际读取字节数
            失败返回-1 
            读到文件末尾返回0

三、标准IO与文件IO的区别:
    1.系统调用:
        Linux内核中的代码称为系统调用    
    2.库函数:
        是针对操作系统内核中代码的封装   
    3.标准IO与文件IO的区别:
        1.标准IO是库函数,在Linux和Windows平台均能使用
        2.文件IO是系统调用,只有在Linux内核平台中才能使用
        3.标准IO是一种有缓存的IO
        4.文件IO是没有缓存的IO    
    4.标准IO应用场景:
        1.主要用来操作普通文件
    5.文件IO应用场景:    
        1 .主要用来操作设备文件以及除普通文件外其余类型的文件
    6.标准IO缓存
        标准IO中的函数接口将数据放入缓存区中,满足刷新条件交给内核
        缓存分类:
            1.全缓存:
                缓存区满,刷新缓存区         与文件建立的缓存一般都为全缓存
                刷新条件:
                    1.存满4k刷新
                    2.程序结束刷新(fclose刷新)
                    3.fflush函数强制刷新
            2.行缓存:                       与终端建立的缓存一般为行缓存   stdin stdout 
                遇到\n刷新
                刷新条件:
                    1.遇到\n刷新
                    2.存满1k刷新
                    3.程序结束刷新(fclose刷新)
                    4.fflush函数强制刷新 
            3.不缓存:                       人机交互、界面控制、出错处理    stderr 
                直接刷新
                刷新条件:
                    1.直接刷新 
 

  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学嵌入式的小白KK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值