工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2143|回复: 12

如何自己编程实现文件读写?

[复制链接]
发表于 2006-12-29 22:55 | 显示全部楼层 |阅读模式
今天看书的时候突然想,我们平时写程序要读写文件时,总会调用某个函数,如果自己写一个函数,要怎样写呢?

是不是要用汇编写,直接在磁盘上读写?

这个工作是进行底层开发的人做的?

想讨论下,没结果就当吹水也好
发表于 2006-12-30 10:09 | 显示全部楼层
不知道楼主所说的是什么意思。
如果是API函数,那就是在系统开发阶段写的吧。
做USB文件系统有时候也会涉及到一点。
这个wool应该是很清楚滴,他好像是信工的。
回复

使用道具 举报

 楼主| 发表于 2006-12-30 10:16 | 显示全部楼层
我想知道的是完全不调用任何API函数(比如C的fopen()之类,java的Reader类,甚至汇编的中断),一切都自己动手,不知道可不可以呢?

希望通过这个真正理解文件操作是怎么回事
回复

使用道具 举报

发表于 2006-12-31 06:19 | 显示全部楼层
LS真厉害呀....
回复

使用道具 举报

发表于 2006-12-31 08:27 | 显示全部楼层
不用汇编的话,可以逐个写硬件指令,或者可以考虑下手动转动磁头,手动产生电流写进1,0……
现在的硬盘,无论是ide还是scsi,采用的都是"温彻思特“技术,都有以下特点:

1。磁头,盘片及运动机构密封。

2。固定并高速旋转的镀磁盘片表面平整光滑。

3。磁头沿盘片径向移动。

4。磁头对盘片接触式启停,但工作时呈飞行状态不与盘片直接接触。
盘片:硬盘盘片是将磁粉附着在铝合金(新材料也有用玻璃)圆盘片的表面上.这些磁粉被划分成称为磁道的若干个同心圆,在每个同心圆的磁道上就好像有无数的任意排列的小磁铁,它们分别代表着0和1的状态。当这些小磁铁受到来自磁头的磁力影响时,其排列的方向会随之改变。利用磁头的磁力控制指定的一些小磁铁方向,使每个小磁铁都可以用来储存信息。
盘体:硬盘的盘体由多个盘片组成,这些盘片重叠在一起放在一个密封的盒中,它们在主轴电机的带动下以很高的速度旋转,其每分钟转速达3600,4500,5400,7200甚至以上。
磁头:硬盘的磁头用来读取或者修改盘片上磁性物质的状态,一般说来,每一个磁面都会有一个磁头,从最上面开始,从0开始编号。磁头在停止工作时,与磁盘是接触的,但是在工作时呈飞行状态。磁头采取在盘片的着陆区接触式启停的方式,着陆区不存放任何数据,磁头在此区域启停,不存在损伤任何数据的问题。读取数据时,盘片高速旋转,由于对磁头运动采取了精巧的空气动力学设计,此时磁头处于离盘面数据区0.2---0.5微米高度的”飞行状态“。既不与盘面接触造成磨损,又能可靠的读取数据。

电机:硬盘内的电机都为无刷电机,在高速轴承支撑下机械磨损很小,可以长时间连续工作。高速旋转的盘体产生了明显的陀螺效应,所以工作中的硬盘不宜运动,否则将加重轴承的工作负荷。硬盘磁头的寻道饲服电机多采用音圈式旋转或者直线运动步进电机,在饲服跟踪的调节下精确地跟踪盘片的磁道,所以在硬盘工作时不要有冲击碰撞,搬动时要小心轻放。

一开机硬盘就处于旋转状态,主轴电机的旋转可以达到4500或者7200转每分钟,这和你是否使用下载工具没有关系,只要一通电,它们就在转.它们的磨损也和软件无关。

再次,寻道电机控制下的磁头的运动,是左右来回移动的,而且幅度很小,从盘片的最内层(着陆区)启动,慢慢移动到最外层,再慢慢移动回来,一个磁道再到另一个磁道来寻找数据。不会有什么大规模跳跃的,所以它的磨损也是很少的。
那么,热量是怎么来的呢?
首先是主轴电机和寻道饲服电机的旋转,硬盘的温度主要是因为这个。
其次,高速旋转的盘体和空气之间的摩擦。这个也是主要因素。
硬盘的读操作,是盘片上磁场的变化影响到磁头的电阻值,这个过程中盘片不会发热,磁头倒是因为电流发生变化,所以会有一点热量产生。写操作呢?正好反过来,通过磁头的电流强度不断发生变化,影响到盘片上的磁场,这一过程因为用到电磁感应,所以磁头发热量较大。但是盘片本身是不会发热的,因为盘片上的永磁体是冷性的,不会因为磁场变化而发热。热量是可以辐射传导的,那么高热量对盘片上的永磁体会不会有伤害呢?其实伤害是很小的,永磁体消磁的温度,远远高于硬盘正常情况下产生的温度。当然,要是你的机箱散热不好,那可就怪不了别人了。
回复

使用道具 举报

 楼主| 发表于 2006-12-31 16:46 | 显示全部楼层
看了楼上的引用,觉得自己不可以实现文件操作了。

这些事应该是操作系统做的,还是不理它算了。
回复

使用道具 举报

发表于 2007-1-1 15:00 | 显示全部楼层
个人觉得,单纯学习的话可以去研究研究,否则已经实现了的东西,就没有必要自己再去实现,直接拿来用。因为你自己开发出来你能保证比前人做的好吗?会比前人做的有什么特别之处么?
回复

使用道具 举报

发表于 2007-1-1 15:06 | 显示全部楼层
楼上说得对。

楼主是个贪心的家伙。

回复

使用道具 举报

发表于 2007-1-1 15:18 | 显示全部楼层
好像就是你自己吧~~~嘿嘿~
回复

使用道具 举报

发表于 2007-1-2 19:21 | 显示全部楼层
LS说得对,LZ是个坏家伙...
回复

使用道具 举报

发表于 2007-1-2 19:37 | 显示全部楼层
呵呵,我不同意楼上几位的说法呦。
刨根问底,弄懂原理始终都是一件好事。
回复

使用道具 举报

发表于 2007-1-4 00:44 | 显示全部楼层
同意11楼
要是大家都像7楼那样想,世界就不会进步了
回复

使用道具 举报

发表于 2007-1-4 01:01 | 显示全部楼层
从研究的角度来看,LZ的出发点很好.

关于LZ想实现的,,,估计得研究下操作系统了...这些都是操作系统实现的.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-8-31 04:25

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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