如何把一个数据存到文件系统中?是怎么存的?--【sky原创】

块设备文件:

表示文件系统高速缓存的设备,例如硬盘驱动器

设备文件:

表示非高速缓存的设备,例如磁带驱动器、鼠标和系统终端

那么如何把一个数据存到文件系统中?是怎么存的?

一般地,我们认为文件就是文件的数据信息,它存放在磁盘上,如果单纯的这样理解就错了

和每一个文件相关的信息都会放在索引节点上,比方说它是字符设备的话,就是字符设备文件,还有它的权限,属组,以及大小、更新时间等信息都属于文件的相关信息,如果一个文件的大小是1kb的话,那么实际拷贝文件的话,所需要的空间要大于1kb,因为它还要拷贝索引节点

当我们拷贝文件的时候也会拷贝文件的索引节点

不是说文件就只是文件而已,它还有索引节点

还有一个v节点,是在linux内核上的内存区中,和索引节点不同

文件的话都会有一个偏移指针,读取、写等操作都会操作这个指针,那么我们对于文件操作的话都会使得偏移指针发生变化,那么我们就会在Linux内核上起一个V节点,把文件的偏移指针放在了V节点上面,

V节点 -->  索引节点 --> 文件

索引节点和文件都是存放在磁盘上面的,v节点是存放在linux内核的内存区的

V节点只和文件打开相关,文件关闭了的话,V节点就关闭了,但是索引节点不会关闭,如果文件被删除了的话,索引节点就被删除了

至于怎么访问文件就需要系统调用API,我们老说API,但是很多人把API认为是和调用c库函数一样的,这样的理解是错误的,下面我先说说API是什么?

API(Application Programming Interface,应用程序编程接口)通过英文可以看出是应用程序编程的接口。

API是由内核实现的函数接口

MMI -- 人机交互接口

Gui是图形化的一个接口,图形用户界面

应用层一般通过一个界面去调用API,就可以和内核进行交互,内核再通过驱动程序和硬件进行交互

应用和内核要进行交互,我们需要调用硬件设备,那么我们就需要调用API,虽然API也是一个函数,它其实是运行在内核上的,是内核的一段程序,如果应用层要操作硬件,那么必须经过内核,也就要必须调用API

然后内核通过驱动程序操作硬件

我们通过opendir()及相关函数,可以获取目录结构信息

通过系统调用stat()可以从索引节点获取文件信息

通过常用的文件操作函数open()  、 read()等函数可以访问文件的数据

欢迎交流

如有转载请注明出处

新浪博客:http://blog.sina.com.cn/u/2049150530
博客园:http://www.cnblogs.com/sky-heaven/
知乎:http://www.zhihu.com/people/zhang-bing-hua

时间: 2024-08-07 04:30:53

如何把一个数据存到文件系统中?是怎么存的?--【sky原创】的相关文章

ASP.NET实现弹出框真分页将复选框选择的数据存到数据库中(一)

ASP.NET实现弹出框真分页将复选框选择的数据存到数据库中,这个问题分一下几步走 1.将弹出框真分页后复选框选择的数据保存. 2.将弹出框保存的数据传到父页面上. 3.将数据在父页面上显示. 4.点击保存将信息存入数据库中. 首先来第一步将弹出框真分页后复选框选择的数据保存. 思路很简单就是先真分页,然后在点击下一页的时候扫描这一页所有点击复选框的数据保存到一个变量数组中.下面就是主要代码: ASP代码: <%@ Page Language="C#" AutoEventWire

python爬取微博图片数据存到Mysql中遇到的各种坑\python Mysql存储图片

本人长期出售超大量微博数据,并提供特定微博数据打包,Message to [email protected] 前言   由于硬件等各种原因需要把大概170多万2t左右的微博图片数据存到Mysql中.之前存微博数据一直用的非关系型数据库mongodb,由于对Mysql的各种不熟悉,踩了无数坑,来来回回改了3天才完成. 挖坑填坑之旅 建表 存数据的时候首先需要设计数据库,我准备设计了3个表 微博表:[id, userid, blog_text, lat, lng, created_time, res

java中将int类型数据存到数组中

//定义一个数据 int number = 123456; //定义一个数组 int[] arr = new int[8]; //通过观察这个代码,我们发现应该是可以通过循环改进的 int index = 0; while(number > 0) { //number=123456,number=12345,number=1234,number=123,number=12,number=1,number=0 arr[index] = number%10; //arr[0]=6,arr[1]=5,

Hive数据导入——数据存储在Hadoop分布式文件系统中,往Hive表里面导入数据只是简单的将数据移动到表所在的目录中!

转自:http://blog.csdn.net/lifuxiangcaohui/article/details/40588929 Hive是基于Hadoop分布式文件系统的,它的数据存储在Hadoop分布式文件系统中.Hive本身是没有专门的数据存储格式,也没有为数据建立索引,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据.所以往Hive表里面导入数据只是简单的将数据移动到表所在的目录中! Hive的几种常见的数据导入方式这里介绍四种:(1).从本地文件系统中

使用hexdump工具追踪EXT4文件系统中的一个文件

昨天追踪EXT4文件系统的过程中出了点问题,就是找不到文件,于是试了一下追踪FAT32文件系统的,成功之后有了点信心,今天继续嗑EXT4文件系统,终于找到啦,记录一下. 操作系统:linux(centos 6.5) 文件系统:EXT4 工具:hexdump,windows自带计算器 参考书目:<数据重现-文件系统原理精解与数据恢复最佳实践>(马林 著),题为<Ext4文件系统架构分析>的系列博客,不知道原作是谁了. EXT4文件系统架构: 补充说明:EXT4文件系统中只有0号块组的

1.scrapy爬取的数据保存到es中

先建立es的mapping,也就是建立在es中建立一个空的Index,代码如下:执行后就会在es建lagou 这个index. from datetime import datetime from elasticsearch_dsl import DocType, Date, Nested, Boolean, \ analyzer, InnerDoc, Completion, Keyword, Text, Integer from elasticsearch_dsl.connections im

浮点型数据转存到字符串中(转)

一.C语言中数值型数据分为两大类:整型和浮点型整型:char int short long浮点型:float(单精度) double(双精度) 二.浮点型数据转存到字符串中char str[30]; //定义一个字符数组,来存储数据double d=123.456; //定义一个浮点型变量dsprintf(str,"%f", d ); //格式串同printf()格式要求sprintf(str,"%.2f", d ); //保留两位小数,第三位四舍五入 三.整型数据

sql 数据库中只靠一个数据,查询到所在表和列名

有时候我们想通过一个值知道这个值来自数据库的哪个表以及哪个字段,在网上搜了一下,找到一个比较好的方法,通过一个存储过程实现的.只需要传入一个想要查找的值,即可查询出这个值所在的表和字段名. 前提是要将这个存储过程放在所查询的数据库. 注:1步骤是创建存储过程,可以在任何一个数据库中使用,2步骤是调用它来查找数据库中所有牵扯到的列以及对应的表. 只需要一个数据 真是非常方便 一.首先 点击新建查询 ,左上角选择到自己的数据库,然后把下面这段复制进去  然后运行 CREATE PROCEDURE [

缓存到Redis中记录数据

一.先配好 Redis http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2011/0406/7873.html 我自己配好的地址. <appSettings> <add key="RedisUrl" value="10.10.4.50:7895" /> //域名 <add key="Redisdata" value="12" /> //