【Linux】基础IO(下)!!!

在C库里面的IO函数在底层也是通过调用系统的IO函数来实现的。因为在系统IO函数里面是通过fd(文件描述符)实现的,所以在C库里面是将fd(文件描述符)进行了封装。

在C库函数向显示器输出的时候是行缓冲,但是在向文件输出的时候是全缓冲,因为在系统提供的函数里面是没有自带缓冲区的,所以在C库函数封装的时候提供的。


int main()
{
    char * buf = "haha\n";
    fwrite(buf,strlen(buf),1,stdout);
    fork();
    return 0;
}

结果是:
这里写图片描述

再将上面的结果重定向之后./a.out > hehe.txt
结果是:
这里写图片描述

注:在这里当输出是输出到屏幕的时候是行缓冲,但是在重定向之后就将行缓冲变成了全缓冲,所以当执行fork之前不一定会将输出数据输出,有可能在fork之后,而在fork之后含有一个子进程,子进程包含的缓冲数据和父进程一样,所以在这里面就会在文件里面输出两个相同的数据。

文件系统:
这里写图片描述
超级快:存放文件系统的信息
i结点表:存放文件的基本信息
数据区:存放数据内容

inode结构:
在linux里面每个问价 都对应这一个inode号,在系统区别文件的时候也是依靠inode号来实现区分的,在这个inode里面保存这文件系统的基本信息,除开文件名。

显示inode信息:stat filename
显示inode号和文件名:ls -i filename
显示inode总数和已使用inode数:df -i

在系统里面打开一个文件是通过一个叫目录文件来寻找的,这个目录文件的里面含有所有文件的inode和文件名,在需要访问文件信息的时候就会进入inode里面将文件的信息输出。
如图:
这里写图片描述

硬链接:
使用in filename1 filename2可以将filename1filename2硬链接起来。
这里写图片描述

在底层可以发现,实现硬链接的两个文件的inode号会一样的,那么就可以得出结论,在实现硬链接的时候其实是将两个文件公用一个inode号。

软连接:
软连接ln -s filename1 filename2是创建一个新的文件,访问这个文件的时候就会通过连接去访问原始文件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值