linux课程学习二——缓存

一.文件io与标准io的一个区别

遇到死循环可以ctrl c结束进程

使用printf输出,输出没有问题

用wirte输出,参数1,可以理解为上面介绍的linux标准文件描述符的1(STDOUT)标准输出,我们加上一个死循环while(1);去执行文件发现是可以执行的(把\n去掉),但是用printf去执行就不可以。对于这个问题就引出了接下来要讲的缓存

二.缓存

把用户缓存内容发到内核缓存中有四种方法

1./n

2.满缓存时(1024字节)

3.系统调用函数

4.fflush函数

三.行缓存fputs

缓存有如下三类,每一类都有所不同

行缓存的原函数和参数

,使用fclose就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关

的缓冲区在fclose之前写一个死循环,这样子才可以看出效果,因为 使用fclose就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区,这回导致缓存没有满就把内容存进去了。之后我们可以看出,a.c里面没有任何内容。

三.fflush函数

在没有使用fflush函数之前代码时不能输出的,使用之后就可以把hello world输出

把printf换成fputs("hello world",stdout)函数,我们不使用fflush也是无法输出的,但是把标准输出atdout改成staerr不使用fflush也可以输出。因为stderr是三类缓存读写函数中的无缓存,直接讲内容写到内核中。

用fget读数据到数组中然后输出

注意事项

使用fputs函数写内容到文件a.c中时光标是会移动的,写完之后光标是在d之后的,用fgets函数获取内容时,要用fseek函数移动光标到文件头,不然光标都在末尾了是读不出什么数据的,fseek函数也可以用rewind函数代替,效果一样

ftell函数使用

在代码写入和获取执行之后,我们使用ftell函数来显示一下当前光标所在的位置是哪里,从结果可以之后fgets获取内容之前光标被rewind移动到了文件开始,fgets函数使用完之后光标又被移到了离文件开始11的位置,也就是d后面。

四.gets与fget

用gets输入了七字符它存入的也是七个

将gets换成fgets,可以看到我们输入了六个,但是len是7,这是因为fgets将新的换行符存入缓存中

五.put与fput

接着上面的代码修改,执行后可以看到内容有个新的换行符输出

六.fprintf与sprintf

用fprintf把内容输出到a.c文件中,fprintf是行缓存的函数,如果在return之前加whilie(1);与

fclose(fp);执行代码的时候会停留在while哪里,这时打开另一个终端去查看a.c里的内容是空的

sprintf是用于将内容写入到一个数组之中

七.fgetc与fputc

注意fputs与fputc的 区别

fputc

下不给写入"\n",我们去运行发现a.c中没有内容,给也没有,这说明fputc又缓存但是不是行缓存

fgetc

八.cat指令

复制代码
#include<stdio.h>
int main(int argc,char *argv[])
{
    FILE fp;
    int nRet=0;
    if(argc!=2)
    {
        printf("fail\n");
    return -1;
    }
    fp=fopen(argv[1],"r");//只读方式打开    
    if(fp==NULL)
    {
        PRINTF("open fail\n");
        return -2;
    }
    while(1)
    {
        nRet = fgetc(fp);//获取文件中内容
        if(feof(fp))  //判断是否一到文件结束(读取内容完成)
        {
            break;//跳出while循环
        }
        fputc(nRet,stdout);//内容输出到屏幕
    }
    fclose(fp);

    return 0;
}

九.标准IO之feof,ferror与flearerr

相关推荐
CCCC13101632 小时前
嵌入式学习(day 28)线程
jvm·学习
星星火柴9363 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
小狗爱吃黄桃罐头3 小时前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
艾莉丝努力练剑3 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
武昌库里写JAVA5 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
杜子不疼.5 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习
小幽余生不加糖5 小时前
电路方案分析(二十二)适用于音频应用的25-50W反激电源方案
人工智能·笔记·学习·音视频
..过云雨6 小时前
01.【数据结构-C语言】数据结构概念&算法效率(时间复杂度和空间复杂度)
c语言·数据结构·笔记·学习
myzzb6 小时前
基于uiautomation的自动化流程RPA开源开发演示
运维·python·学习·算法·自动化·rpa
非凡ghost9 小时前
AMS PhotoMaster:全方位提升你的照片编辑体验
windows·学习·信息可视化·软件需求