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

块设备文件:

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

 

设备文件:

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

 

 

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

 

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

 

和每一个文件相关的信息都会放在索引节点上,比方说它是字符设备的话,就是字符设备文件,还有它的权限,属组,以及大小、更新时间等信息都属于文件的相关信息,如果一个文件的大小是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-10-01 17:56:38

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

保存数据-MSComm控件串口接收数据存到txt中出现乱码

问题描述 MSComm控件串口接收数据存到txt中出现乱码 我在用C++做一个串口程序,用了MSComm控件,新手遇见了点问题,我用串口助手试了试我的程序,如果十六进制发送那么我接收的数据和串口助手发送的数据不一致,出现了乱码.我还想把我接收到的数据存储在txt文件中,可能是我数据类型没有转换对,txt文件里的接收数据也是乱码,不知道哪位能指点一下. void CSendcomDlg::OnComm() { // TODO: Add your control notification handl

如何数据库中数据存到数组中

问题描述 请问如何把数据库中的数据存到数组中,试了几种方法总是出错,希望能看一下demo片段 解决方案 1.你把从数据库中获取的list做个for循环,在循环的过程中,每次循环将list中一条数据插入到数组中2.可以使用追加的方式进行:List arr =new ArrayList();for(int i=0;i<list.size;i++){ arr.add(list.get(i));}办法有很多种的,看个人喜好了解决方案二:我给一个.net的代码吧!!分两种情况回答吧!!一如果你查询的记录中

怎么把数据存到数据库中去呢?(新手)

问题描述 做一个简单的注册及登录模块我想知道账号密码怎么存在SQL去..不太懂希望可以详细的说下 解决方案 解决方案二:sqlhelper解决方案三:存数据库有两种方式:1.ado.net找个sqlhelper数据库操作类,调用就可以了.2.entityframework/nhibernateorm,定义好实体模型以及实体关系,面向对象的方式操作数据库解决方案四:sqlhelperhttp://blog.csdn.net/fengqingtao2008/article/details/17399

编程-单循环列表的的最左端插入一个数据元素

问题描述 单循环列表的的最左端插入一个数据元素 照片中打问号的地方实在不懂.p_>next=p是指向自身,形成了一个环,然后rear又指向了这个环吗,求指教... 解决方案 你说的没错.就是这样. 当rear==null,这个循环链表为空,插入一个元素相当于构造一个自己指向自己的环. 解决方案二: 谢谢你了

python实现爬虫数据存到 MongoDB_MongoDB

在以上两篇文章中已经介绍到了 Python 爬虫和 MongoDB , 那么下面我就将爬虫爬下来的数据存到 MongoDB 中去,首先来介绍一下我们将要爬取的网站, readfree 网站,这个网站非常的好,我们只需要每天签到就可以免费下载三本书,良心网站,下面我就将该网站上的每日推荐书籍爬下来. 利用上面几篇文章介绍的方法,我们很容易的就可以在网页的源代码中寻找到书籍的姓名和书籍作者的信息. 找到之后我们复制 XPath ,然后进行提取即可.源代码如下所示 # coding=utf-8 imp

语言:c++ 从文本文档读取数据,并保存到struct中

问题描述 语言:c++ 从文本文档读取数据,并保存到struct中 各位,我想要从txt文本文档中读取三万行数据,每行两列,一列为小数,一列为整数,现用getline()逐行读取,并将每一行分割成两个数据,保存到struct中,这个struct有double型和int型两个变量,具体应该这么做,希望有人给出具体的代码,感激不尽. 解决方案 1.将整行作为一个String读出来 String str = getline(); 2.用区分两列的符号(" ","; "等)

Sql语句把一个表的某几列的数据存到另一个表里的方法

原文地址:sql语句把一个表的某几列的数据存到另一个表里的方法作者:星星月亮 一.如何用slq语句把一个表中的某几个字段的数据插入到另一个新表中,就要用下面这条slq语句:     insert into 表名1(字段1,字段2) select 字段1,字段2 from 表名2 这里有一点值得注意的是这2个字段要一一对应,并且按顺序. 二.如果另一个表是已经有数据的表,只希望更改其中的一列或几列的话,则用下面的sql语句:    update 表名1,表名2 set 表名1.字段1 = 表名2.

asp.net-GridView中有数据,但是我遍历存储的时候发现没有存到数据库中去

问题描述 GridView中有数据,但是我遍历存储的时候发现没有存到数据库中去 我设计的数据表testdetail为: GridView中有数据,形式为 我现在想把GridView中的Label3的内容(已绑定了数值)存到testdetail的typeid中, 我使用的方法是 DataBase db = new DataBase(); foreach (GridViewRow dr in GridView2.Rows)//保存试卷单选题信息 { string single = "insert i

怎么把数据存到各个表中mysql

问题描述 怎么把数据存到各个表中mysql 一个a实体类和多个不同名字的实体类(b,c,d.....),多个不同名实体类每个对应一张表, 但是实体类中的字段都一样,现在想实现把数据存到不同的数据表中.求通用的方法. 已经可以把页面数据存到a实体类中. 解决方案 MySQL删除表数据把Oracle数据库中的数据存到XML文件从一个表取数据存到另一个表的数据的存储过程 解决方案二: 这个只能将a实体类内容赋值给实体类(b,c,d.....) 然后分别保存 解决方案三: 既然字段一样,应该就在一个表中