文件缓冲区和inode详解

本文探讨了Linux中文件缓冲区的概念,解释了为何在某些情况下使用c语言打印的内容未立即显示。原来,c语言有自己的缓冲区,根据缓冲策略(如行缓冲和全缓冲),会影响输出。关闭文件描述符会导致无法将缓冲区内容写入内核文件缓冲区,通过fflush可以强制刷新。此外,文章还深入讲解了inode,包括其在磁盘文件系统中的作用,如何分配inode号,以及inode如何与文件名映射。最后,提到了符号链接和硬链接的关系。
摘要由CSDN通过智能技术生成

文件缓冲区

有时候我们在调用c语言接口如fwrite,fputs,fputc等,但是我们有时候会看到一种特别的现象,我们明明向显示器打印,但是却没有显示,我们先看一段代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>

int main()
{
        const char * str = "hello 标准输出\n";
        write(1,str,strlen(str));

        printf("%s",str);
        fprintf(stdout,"%s",str);
        fputs(str,stdout);

        //close(1);

}

这段代码毋庸置疑可以打印4句“hello 标准输出”,我们看结果。

我们将它重定向到文件中查看也是正确的,重定向的原理我在上节已经讲过,不知道小伙伴可以看下。 

  

但是我们将close(1)打开,同样将它运行重定义到文件中,我看到结果如下图:

这是文件中只有一条打印,毋庸置疑这条log是系统调用write产生的,那么问题来了,c语言打印的3条log去哪里了,要弄清这个问题,我们需要明白文件缓冲区的概念。

 可以看出c语言中有一个自己的缓冲区,当我们打印内容的时候会先向缓冲区中写入,说到这不少小伙伴可能会有疑问,那我们平时printf的时候。看如下代码

#include<stdio.h>
#include<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值