LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1122|回复: 8

一个文件修改了其中一部分,保存的时候需要将文件全部再写入磁盘一遍吗?

[复制链接]
发表于 2006-8-6 21:37:19 | 显示全部楼层 |阅读模式
如果是这样,若往文件开头插入了一个字符,是不是整个文件都要重新保存一遍?
文本编辑器在这种情况下通常的作法是什么呢?
发表于 2006-8-6 22:21:33 | 显示全部楼层
我瞎猜一下: 这样的事情应该是由内核来管理的吧, 而且不同的文件系统应该会使用不同的策略
回复 支持 反对

使用道具 举报

发表于 2006-8-6 23:06:51 | 显示全部楼层
个人觉得不会,如果这样的话,效率又何在呢!!
文件系统应该可以修改类似于inode之类的相关信息来处理
回复 支持 反对

使用道具 举报

发表于 2006-8-7 11:07:19 | 显示全部楼层
Post by netjune
如果是这样,若往文件开头插入了一个字符,是不是整个文件都要重新保存一遍?
文本编辑器在这种情况下通常的作法是什么呢?


文本编辑器通常的做法就是把整个文件重新保存.
回复 支持 反对

使用道具 举报

发表于 2006-8-7 16:28:40 | 显示全部楼层
to newroot 兄:
我的意思没表达清楚. 文件系统是内核的一部分, 因此文件系统如何管理文件也可以称作内核如何管理文件. 至于文件系统究竟如何管理文件, 这显然由文件系统本身来决定. 不同的文件系统针对不同的目的和用途会采用不同的策略. 是否有那种会局部保存的文件系统呢? 我不知道, 但我想也许有. 至于应用程序, 它们不应该考虑这样的问题, 否则其可移植性必然受到制约, 而且如果这种事都要自己来维护, 那么要内核又有什么用呢?
回复 支持 反对

使用道具 举报

发表于 2006-8-7 18:34:00 | 显示全部楼层
如果只按楼主说的,或者

    ---   一个 5120 字节的文件,原来刚好在 10 个磁盘扇区里,现在最前面加了一个字节,
这样保存要 保存 11 个扇区.. 全部重写.

   到目前为止,应该没有文件系统能实现 扇区 内索引的功能
回复 支持 反对

使用道具 举报

发表于 2006-8-7 19:27:14 | 显示全部楼层
Post by DoDo
to newroot 兄:
我的意思没表达清楚. 文件系统是内核的一部分, 因此文件系统如何管理文件也可以称作内核如何管理文件. 至于文件系统究竟如何管理文件, 这显然由文件系统本身来决定. 不同的文件系统针对不同的目的和用途会采用不同的策略. 是否有那种会局部保存的文件系统呢? 我不知道, 但我想也许有. 至于应用程序, 它们不应该考虑这样的问题, 否则其可移植性必然受到制约, 而且如果这种事都要自己来维护, 那么要内核又有什么用呢?



呵呵,我也只是猜想楼主的问题在背后是如何具体实现的!

当然后DODO说的很有道理啦!! 底层的驱动程序在很大程度上会考虑上层应用的.

在linux上,文件系统管理好像叫vfs之类的东西,事实也也正是体现了这一点,

对于文件系统来说大概也就是read, write, delete这三程操作,所以在内核中也只需通过放置

相关的指针来实现对不同文件系统的操作.

(我没有写过驱动,只是了解一下,很肤浅啦!! )
回复 支持 反对

使用道具 举报

发表于 2006-8-8 05:35:57 | 显示全部楼层
至少在上层FILE操作时,用FILE *fp = fopen(filename, "w+")之后,如果你要想在文件头部插入一个字节,唯一的做法就是把文件从头到尾写一遍。从这一点来看,底层文件系统也需要重新把整个FILE在磁盘上的数据写一遍才行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-9 00:10:00 | 显示全部楼层
我问的就是用户层的文件的操作,不涉及内核层的, 让朋友们说了这么多,现在有点明白了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表