checkingfile卡住不动关机半天没反应也没反应 怎么办

开机出现checking file system on C或者D E F盘符的解决方法_夜鸣死寂吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:23贴子:
开机出现checking file system on C或者D E F盘符的解决方法
出现这种情况一般是非正常关机造成的,这是硬盘自检,属于正常现象,只不过比较耽误时间,如果你觉得烦是可以取消的。
&&&在不正常关机的情况下(如:突然断电等),就会在下次启动电脑时进行磁盘扫描。可是往往等它完成扫描后,再一次启动电脑时它还是“阴魂不散”的继续扫描。我就遇到过这种情况,所以就总结了以下几条经验,希望能给大家一些参考。
1、系统的问题系统解决
我们在界面下,通过“磁盘碎片整理”程序来完成。首先启动“CMD”键入“chkdsk&x:&/f”(x为盘符)进行扫描;然后启动“磁盘碎片整理”对相应的磁盘进行碎片整理,可以消除再次的磁盘扫描。
2、注册表也来阻止扫描
我们知道系统之所以要对磁盘进行扫描是因为在注册表中设置了“脏”字节。在注册表中找到以下分支:“Hkey_local_machine\System\CurrentControlSet\Control\Session&Manager”在注册表右侧的窗口中找到“BootExecute:REG_MULTI_SZ”就是关于磁盘扫描的,双击“BootExecute:REG_MULTI_SZ”将其改为:“autocheck&autochk&*”即可恢复成正常的状态。
3、使用第三方软件&
硬盘是一个很敏感的配件,日常的维护工作也十分重要。我通过Drive&Health来检测硬盘健康状况,用休复硬盘中的逻辑错误。重点说一下对优化大师的设置(如图),“维护/系统磁盘医生”中点击“设置”将第一、四个选项勾选上。选择要整理的磁盘,点击“检查”即可。(相应选项的解释请参考“windows优化大师”的帮助)
4、格式化硬盘
如果以上的方法还是不行的话就要将相应的硬盘进行格式化了,我在使用电脑时系统极其不稳定常常重启,然后就是磁盘扫描。我很奇怪就打开“事件查看器”一大堆的警告:事件为NTFS,描述为文件系统不正常。不过在中能够正常访问该盘的内容,我还是为了以防万一格式了。果然听不到硬盘较大的声响,还有那讨厌的磁盘扫描了。
在实际使用计算机中,由于死机、非正常关机等原因,可能会出现一些系统故障。我们应该针对这些故障做必要的调查采取相应的措施。在日常使用中应该尽量避免不正确的操作,对硬盘中的重要文件做到异地备份将损失降到最低。
&&&其他方法:
&&&A&右键我的电脑=属性=高级=启动故障恢复,把里面的勾选全去掉。再就是右键我的电脑=属性=高级时有个错误报告,把它设置为,禁用错误汇报,和“但在发生严重错误......”这项也去掉勾选。&&&&&&其二、就是BIOS里的设置,这项技术含量高了点
&&&如果安装了分区之类的软件也有可能出现这类问题。
&&&如果经常是这样的话,那有可能是硬盘分区表有问题,或有坏道。可以对故障盘进行扫描检测和修复损坏扇区,进行碎片整理,然后重新启动电脑。
&&&B&这个问题只需取消开机自检就OK了!需要的时候再打开(cmd窗口进入扫描盘目录,输入输入chkdsk&/f即可下次开机扫描该盘)&
(很多垃圾系统只要一安装,每次都有开机自检,搞得菜鸟们很烦却又无可奈何)
最简单方法:&
将下面一段字符复制到一个记事本中,另存为“取消自检.reg”,再双击导入注册表,即可取消所有的开机自检!
&Registry&Editor&Version&5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session&Manager]&
&BootExecute&=hex(7):00,00
保存时类型选择“所有文件”,再输入&.reg
关闭每次开机硬盘自检的方法&(详细)&
每次打开集合石总能看到...
刚刚从某东入了个4TB红...
万恶置顶,问题太多估计...
就是开机进不了桌面
这是咋回事 我去 打开出...
如题 机箱才快递回来 风...
不要试图找亮点奥
有没有人知道怎样能把里...
你们骗了我好久
开了十次都是,进去刚准...
已经这样好几个星期了
电脑盘符26个字母用完后...
1、机器的自检:&
是的,在里面设置里面可以设置。(Power-On-Self-Test&)
2、启动的时候自动扫描:&
以下指XP:&
这个问题原因可能很多,比如有坏区。&
或者关机不正常。&
你试一试在XP下把全部磁盘扫描一次(自动修复错误)
查看注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session&Manager&BootExecute\&
是不是有&
autocheck&autochk&/p&\??\D:&
autocheck&autochk&/p&\??\H:&
autocheck&autochk&*&
这样的内容,清除掉试一试
也可以选择“开始→运行”,在运行对话框中键入“chkntfs&/t:0”,即可将磁盘扫描等待时间设置为0;如果要在计算机启动时忽略扫描某个分区,比如C盘,可以输入“chkntfs&/x&c:”命令;如果要恢复对C盘的扫描,可使用“chkntfs&/d&c:”命令,即可还原所有chkntfs默认设置,除了自动文件检查的倒计时之外。
关闭开机自检的方法&
选择“开始→运行”,在运行对话框中键入“chkntfs&/t:0”,即可将磁盘扫描等待时间设置为0;如果要在计算机启动时忽略扫描某个分区,比如C盘,可以输入“chkntfs&/x&c:”命令;如果要恢复对C盘的扫描,可使用“chkntfs&/d&c:”命令,即可还原所有chkntfs默认设置,除了自动文件检查的倒计时之外。
关闭WINXP开机自检&
CHKNTFS&volume&[...]&
CHKNTFS&/D&
CHKNTFS&/T[:time]\r\r&
CHKNTFS&/X&volume&[...]&
CHKNTFS&/C&volume&[...]
volume&指定驱动器号(后面跟一个冒号)、装入点或卷名。&
/D&将计算机恢复成默认状态,启动时检查所有驱动器,并对有问&
题的驱动器执行&chkdsk&命令。&
/T:time&将&AUTOCHK&初始递减计数时间改成指定的时间,单位为秒数。&
如果没有指定时间,则显示当前设置。&
/X&排除启动时不作检查的驱动器。上次执行此命令排除的驱动器此&
时无效。&
/C&安排启动时检查驱动器,如果驱动器有问题,运行&chkdsk。
如果没有指定命令行开关,CHKNTFS&会显示每一驱动器有问题的位的状态。
去掉就应该是&在cmd里面“chkntfs&/x&c:&d:&e:&f:”还有的话就g&H&等。
谢谢,看懂了之后,终于弄好了~~~
我是一个电脑菜鸟,但是我的电脑也遇到了:Checking file system on D:,the type of the file system is NIFS这样的问题,我首先进行磁盘清理但是不可以,于是我按照在注册表中找到以下分支:“Hkey_local_machine\System\CurrentControlSet\Control\Session Manager”在注册表右侧的窗口中找到“BootExecute:REG_MULTI_SZ”双击然后将其值“autocheck autochk *”清空,然后重启。这种方法我试过,确实可以,但是网友说这样的方法会导致以后系统不再对任何磁盘进行检测,所以我又把BootExecute:REG_MULTI_SZ的值恢复为autocheck autochk *。也就是说我放弃了修改注册列表的方法。然后我糊里糊涂的摸索了一个方法,就是:选择“开始→运行”,在运行对话框中键入“chkntfs /t:10”。然后重启,结果就不会再进行扫描D盘了。我是个电脑菜鸟,我不知道我这样做为什么就可以,但是做了后我原来启动电脑需要38秒,按照我的方法做了后启动需要42秒,比原来慢了4秒。但是我不知道我这样做是否会对我电脑的其他方面造成坏的影响,因为我这是糊里糊涂的搞的。而我之所以要这样弄是因为我刚开始是按照上面楼主的方法:选择“开始→运行”,在运行对话框中键入“chkntfs /t:0”,即可将磁盘扫描等待时间设置为0。结果我发现这个方法无法解决问题,而是将等待时间设置为0这样我们是无法选择不进行扫描的,于是我打算把等待扫描的时间确定为10,这样我可以确实是否要跳过扫描,所以我才进行了“选择“开始→运行”,在运行对话框中键入“chkntfs /t:10”的操作,然后我重启,竟然发现重启后不会出现要重新扫描D盘的情况了。我实在不知道这是为什么,期待电脑高手的指教。
喜欢玩游戏的姑凉都是好姑凉!
Checking file system on D:,the type of the file system is FAT32the volume is dirtyvolume serial number is 2F6A-1BE7windows is verifying files and folders...80 percent completed....自检到80就不动了 无法进如到桌面多次启动还是这样·····求救···求救
非常感谢你的方法 我用在“运行”中输入“chkntfs /t:0”方法弄好了高兴ing
厉害!!!!!!必须要顶!
我刚也这样&吓的我
按照那个方法A 关闭启动和故障恢复里的东西对电脑有影响吗
试了一下,还不知道可不可以。反正就是装了ubuntu的双系统后,每次上了ubuntu切换成windows都会这样。烦得要死。
我也出现了这样的问题,,,,,正在研究中,,,,,我每次开机,,,都要自检,,,三个小时,,,,修复系统了,,,也还是一样,,,,郁闷得要命,,,,,,
我集中也这样,正在研究谢谢楼主给了这么多方法
。。。无语啊开始只是想进行磁盘整理结果开机出现这个,顶楼主
checking file system on d:the type of the file system is NTFS.the volume is dirty也是等了很久、、、半天没反应
最简单方法:&&按下面的方法即可取消所有的开机自检! Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]&&"BootExecute"=hex(7):00,00 保存时类型选择“所有文件”,在文件名处输入
.reg 另存为在桌面上,然后双击,出现一个对话框,点确定就OK了一定不要输错!!!很好用!!
我们在Windows界面下,通过“磁盘碎片整理”程序来完成。首先启动“CMD”键入“chkdsk x: /f”(x为盘符)进行扫描;然后启动“磁盘碎片整理”对相应的磁盘进行碎片整理,可以消除再次的磁盘扫描。
第一句话 就没看懂....求解释? 怎么启动CMD....?
在开始中输入cad
我也顶你!!!我也是用这个方法解决的。
顶起!!!好用啊
Checking file system on D:,the type of the file system is FAT32老是桌面停止了一下就重启了,求解!帮帮忙
告诉你咋办.他在自检之前会有一个倒计时,10 9 8 7什么的.你只要按一下回车即可进入桌面.亲身经历.
你的硬盘坏扇了.
太好了,终于解决了
我们在Windows界面下,通过“磁盘碎片整理”程序来完成。首先启动“CMD”键入“chkdsk x: /f”(x为盘符)进行扫描;然后启动“磁盘碎片整理”对相应的磁盘进行碎片整理,可以消除再次的磁盘扫描。可以啊!顶……
那也不可能是我两个盘都进不去吧?
我的也是 和你们那一样的 我的是两个硬盘的,,结果我换了以后才发现 都进不去系统 等很久,,原来是3个硬盘的
是不是拿掉了一个就进不去了?
注册表被我乱搞,一个未设置的被我弄成空白,然后过了几天就有了checking file system onG:N个字母,然后就是等待,我老爸都怀疑我乱搞电脑了...
内&&容:使用签名档&&
保存至快速回贴电脑开机蓝屏并出现checking file system on F:等,而且进不去菜单怎么解决_百度知道
电脑开机蓝屏并出现checking file system on F:等,而且进不去菜单怎么解决
电脑开机蓝屏并出现checking file system on F:等,而且进不去菜单怎么解决
提问者采纳
0”,00就是你的硬盘有问题了 需要解决:BootExecute里的autocheck autochk * 改成autocheck autochk /CurrentControlSet&#92:00;x c:这样没用;&#92.. 方法五;x c,如果驱动器有问题;SYSTEM\T:C * 还不行估计你硬盘有坏道了.: f.] volume 指定驱动器号(后面跟一个冒号);=hex(7);BootExecute&quot:time 将 AUTOCHK 初始递减计数时间改成指定的时间,另存为“取消自检、启动的时候自动扫描硬盘:0000000 [HKEY_LOCAL_MACHINE&#92,单位为秒数;.;Session Manager] &d c。 方法二;Control&#92,运行 chkdsk.,比如C盘,则显示当前设置;SYSTEM&#92。 方法三;Control&#92。 如果没有指定时间。在自检的盘符上右击---属性---工具---开始检测---把两项都打个勾;D CHKNTFS /==HKEY_LOCAL_MACHINE&#47:”命令。 /CurrentControlSet\x c:就是这样 —————————————————————————————————— 方法之一;SYSTEM&#92: e.:time 将 AUTOCHK 初始递减计数时间改成指定的时间;AutoChkTimeOut&quot.REG后导入 Windows Registry Editor Version 5..;p &#92,启动时检查所有驱动器;Session Manager] &H;D 将计算机恢复成默认状态。 1。 关闭开机硬盘自检的方法 选择“开始→运行”.reg—————— 进阶方法,清除掉试一试 也可以选择“开始→运行”,则要一个一个的输入;Control\Session Manager的BootExecute 二进位值autocheck autochk,可使用“chkntfs /Control/ 是不是有 autocheck autochk &#47.;t,可使用“chkntfs &#47,则显示当前设置;r&#92: autocheck autochk * 这样的内容;C volume [;CurrentControlSet&#92.] CHKNTFS &#47:0000000[HKEY_LOCAL_MACHINE&#92.:”命令;r CHKNTFS &#47,即可将磁盘扫描等待时间设置为0;Control\Microsoft&#92。(Power-On-Self-Test ) 2:清除注册表Windows NT\SFCScan&Winlogon] &quot。 或者关机不正常;D 将计算机恢复成默认状态;/\T,运行 chkdsk.00 [HKEY_LOCAL_MACHINE\Session Manager BootExecute\p &#92:time]\CurrentVersion&#92: autocheck autochk &#47。 关闭WINXP开机硬盘自检 CHKNTFS volume [:&#47.;t;SOFTWARE&#92、机器的自检.00 [HKEY_LOCAL_MACHINE&#92,如提示不能运行,在运行对话框中键入“chkntfs &#47,可以输入“chkntfs &#47: d,即可将磁盘扫描等待时间设置为0。最简单方法:把以下内容保存为A;X 排除启动时不作检查的驱动器: CHKNTFS volume [: 以下指XP;&#47.用效率源软件修复硬盘:”命令;SYSTEM&#92?;k,再双击导入注册表,打开的文件再试;T[;Session Manager 右边键值.] CHKNTFS /r\T[,不要用chkntfs /Control&#92、装入点或卷名:就是开机自检的那个盘。 /如果要恢复对C盘的扫描。 &#47: 试试到开始-运行-regedit- HKEY_LOCAL_MACHINE\C 安排启动时检查驱动器。 方法四,如果驱动器有问题,在运行对话框中键入“chkntfs &#47,可以关闭所有运行的软件;x c,CHKNTFS 会显示每一驱动器有问题的位的状态;C volume [。 2;X volume [,即可还原所有chkntfs默认设置。 去掉就应该是 在cmd里面“chkntfs &#47,除了自动文件检查的倒计时之外.: e: d:time]&#92,启动时检查所有驱动器,只是增加了几条;D CHKNTFS &#47,如有多个盘都自检?&#92,单位为秒数.reg”;BootExecute&quot,即可还原所有chkntfs默认设置: 注意上面的C,并对有问 题的驱动器执行 chkdsk 命令,比如硬盘有坏区;x c.运行chkntfs /X volume [:关闭每次开机硬盘自检的方法 (详细) 1: 将下面一段字符复制到一个记事本中:0”?:和方法一差不多,可以输入“chkntfs /&#47,CHKNTFS 会显示每一驱动器有问题的位的状态;/r CHKNTFS &#47.] CHKNTFS &#47,比如C盘;CurrentControlSet/CurrentControlSet&#92.] volume 指定驱动器号(后面跟一个冒号),并对有问 题的驱动器执行 chkdsk 命令;SYSTEM&#47。 你试一试在XP下把全部磁盘扫描一次(自动修复错误) 查看注册表;&#47。 如果没有指定命令行开关: f。 如果没有指定命令行开关;如果要在计算机启动时忽略扫描某个分区.] CHKNTFS &#47。 &#47:00,再输入 。上次执行此命令排除的驱动器此 时无效;如果要恢复对C盘的扫描。 /CurrentControlSet\C 安排启动时检查驱动器。 &#47.:”还有的话就g:”命令。 &#47! Windows Registry Editor Version 5。上次执行此命令排除的驱动器此 时无效;X 排除启动时不作检查的驱动器;D。 &#47。 如果没有指定时间,在BIOS里面设置里面可以设置、装入点或卷名;d c.,除了自动文件检查的倒计时之外;如果要在计算机启动时忽略扫描某个分区?&#92,即可取消所有的开机自检;:HKEY_LOCAL_MACHINE&#92: 这个问题原因可能很多: 是的;SYSTEM&#92,00 ——————————保存时类型选择“所有文件”;=hex(7);Session Manager] &quot这个是因为你断电之后对磁盘造成了破坏
来自团队:
其他类似问题
为您推荐:
其他5条回答
关于chkdsk这个命令的使用问题
以下文字为Ctangel总结整理,均为日常工作中所遇到的已经经过证实的方法,并非网络复制的纯理论的东西。有想转载请注明出处,谢谢合作。
相信很多网友在电脑使用过程中收到过这样的提示,任务栏右下角出来一个小提示,说你的某个文件已经损坏,请运行chkdsk修复。其实这个工具是很强大的,不过不好意思对此类问题无效。
那么遇到这个问题该如何解决和这个chkdsk到底能干什么用请看我下面阐述。
一、遇到任务栏右下角提示有文件损坏要求运行chkdsk修复的情况
比如我的机器提示C:\Documents and Settings\pifd\Local Settings\Application Data\Microsoft\Outlook\test.mxl这个文件损坏,这种情况的产生有三种可能:
1、非正常关机
2、病毒造成的破坏
你好,电脑开机蓝屏,主要是:“内存有错误”或“非正常关机”引起!
这是解决方法:(作者:力王历史)
1。试试开机,出完电脑品牌后,按F8,安全模式,光标选定:最后一次正确配置,
回车,回车,按下去!【关键一步】
2。再不行,进安全模式,回车,到桌面后,杀毒软件,全盘杀毒!
“隔离区”的东西,彻底删除!
3。再使用:360安全卫士,“功能大全”里的:“360系统急救箱”,
点:开始急救!重启后,点开“文件恢复区”,全选,彻底删除文件!
系统修复,全选,立即修复!【关键一步】
网络修复,开始修复,重启电脑!
360安全卫士,扫描插件,立即清理!360安全卫士,系统修复,一键修复!
【金山急救箱】,勾选:【扩展扫描】,立即扫描,立即处理,重启电脑!
那句英语的意思是检查系统F盘。说明你F盘中有损坏的文件或文件夹,你那蓝屏是开机自检,按一个键可以跳过开机自检那步直接进入系统。至于这个键是什么我忘了,自检之前或自检之后会有提示按什么键的,你注意一下嘛,进入系统后把F盘中重要的文件复制到其他盘里然后格式话F盘就可以了。以后开机也不会那样蓝屏了。如果格式化F弹出对话框说无法格式化的话就进安全模式格式化,如果安全模式仍不能格式话就说明你电脑虚拟内存路径在F盘,改变虚拟内存路径再格式化,我以前遇到过你这种问题,不过我是在自检D盘。如果不会,百度名就是我QQ,加我,帮你解决!纯手写,望采纳!
如果可以启动
你进去按以下办法操作
进不去就只能重装系统了
或按f8 试试 用最后一次正确配置启动
这个是因为你断电之后对磁盘造成了破坏。
最简单方法:
将下面一段字符复制到一个记事本中,另存为“取消自检.reg”,再双击导入注册表,即可取消所有的开机自检!
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]
&BootExecute&=hex(7):00,00
——————————保存时类型选择“所有文件”,再输入 .reg——————
进阶方法:
关闭每次开机硬盘自检的方法 (详细)
1、机器的自检:
是的,在BIOS里面设置里面可以设置。(Power-On-Self-Test )
2、启动的时候自动扫描硬盘:
以下指XP:...
检查 F盘的错误,等等看,如果半小时后画面没变化,有可能硬盘有问题,要换。
电脑开机蓝屏的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
UID2386566空间积分0 积分1266阅读权限30帖子精华可用积分1266 信誉积分150 专家积分0 在线时间305 小时注册时间最后登录
家境小康, 积分 1266, 距离下一级还需 734 积分
帖子主题精华可用积分1266 信誉积分150 专家积分0 在线时间305 小时注册时间最后登录
论坛徽章:0
就是简单的一些读写操作,fclose的时候就不动了,不加fclose程序结束的时候也会卡住,但其实数据都已经写好了。
[ 本帖最后由 skybyte 于
23:39 编辑 ]
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
UID2386566空间积分0 积分1266阅读权限30帖子精华可用积分1266 信誉积分150 专家积分0 在线时间305 小时注册时间最后登录
家境小康, 积分 1266, 距离下一级还需 734 积分
帖子主题精华可用积分1266 信誉积分150 专家积分0 在线时间305 小时注册时间最后登录
论坛徽章:0
解决了,给一个野指针赋了值.....
UID2386566空间积分0 积分1266阅读权限30帖子精华可用积分1266 信誉积分150 专家积分0 在线时间305 小时注册时间最后登录
家境小康, 积分 1266, 距离下一级还需 734 积分
帖子主题精华可用积分1266 信誉积分150 专家积分0 在线时间305 小时注册时间最后登录
论坛徽章:0
结果,把程序循环1000次都没出错,1W次就
Program received signal SIGSEGV, Segmentation fault.
0x00b9f2dc in memcpy () from /lib/tls/libc.so.6
洗澡了,不看了... ... 明天还要被单位逼用C#,这下不会有这个错了。
[ 本帖最后由 skybyte 于
08:26 编辑 ]
UID空间积分1 积分17815阅读权限100帖子精华可用积分17815 信誉积分292 专家积分115 在线时间377 小时注册时间最后登录
帖子主题精华可用积分17815 信誉积分292 专家积分115 在线时间377 小时注册时间最后登录
论坛徽章:0
还是请您把代码贴出来吧。
很多时候调试程序都感觉象“头痛医脚”的。
大家直接说个结果,就问关闭文件时卡住,大家就会以为关闭文件接口那块去了,而实际上并不是,这样解决问题的效率也很低的。
UID2386566空间积分0 积分1266阅读权限30帖子精华可用积分1266 信誉积分150 专家积分0 在线时间305 小时注册时间最后登录
家境小康, 积分 1266, 距离下一级还需 734 积分
帖子主题精华可用积分1266 信誉积分150 专家积分0 在线时间305 小时注册时间最后登录
论坛徽章:0
现在没段错误了,但还有BUG,还在找,结果都要出错
/*
r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
b(代表二进制)
4 16 64 256 1024块区大小
回收空间4字节块区位置
index结构:12字节keyname,4字节size,4字节块区
*/
#include &stdio.h&
#include &stdlib.h&
#include &string.h&
#include &sys/stat.h&
#include &unistd.h&
#define SIZE 1234567
#include &unistd.h&
struct bintree_el {/*定义一个B树结构体*/
& & & & char key[ 12];
& & & &
& & & &
& & & & struct bintree_el * right, *
};
typedef struct bintree_el bintree_
struct _int_list/*定义一个整型链表*/
{
& & & &
& & & & struct _int_list *
};
typedef struct _int_list int_
typedef struct _treedb{/*定义一个TREEDB的结构体包含了文件和函数指针*/
& & & & & & & & FILE *fp_
& & & & & & & & FILE *fp4;
& & & & & & & & FILE *fp16;
& & & & & & & & FILE *fp64;
& & & & & & & & FILE *fp256;
& & & & & & & & FILE *fp1024;
& & & & & & & & FILE *fp_4;
& & & & & & & & FILE *fp_16;
& & & & & & & & FILE *fp_64;
& & & & & & & & FILE *fp_256;
& & & & & & & & int_list *list4_
& & & & & & & & int_list *list16_
& & & & & & & & int_list *list64_
& & & & & & & & int_list *list256_
& & & & & & & & bintree_node *
& & & & & & & & int(*get)(char *key);
& & & & & & & & int(*add)(char key[30],int id);
& & & & & & & & int (*addall)(char key[30],int id);
& & & & & & & & void (*close)(struct _treedb *treedb);
& & & & & & & & int (*flush)();
}
void int_list_insert(int_list **mylist,int value){/*整型链表插入函数*/
& & & & int_list *
& & tmp=malloc(sizeof(int_list));
& & & & tmp-&value=
& & & & tmp-&next=*
& & & & *mylist=
}
int int_list_pop(int_list **mylist){/*整型链表弹出函数*/
& & & & int_list *
& & & & if(! mylist || (*mylist)-&next==0){
& & & & & & & & return -1;
& & & & }
& & & & tmp=*
& & & & int i=(*mylist)-&
& & & & (*mylist)=(*mylist)-&
& & & & free(tmp);
& & & &
}
void btree_print(bintree_node * tree,int i) {
& &static j=0;
& &if(i&j) j=i;
& &printf(&第%d层%s\n&,i,tree-&key);
& &if(tree-&left)&&{btree_print(tree-&left,i+1);}
& &if(tree-&right) {btree_print(tree-&right,i+1);}
& &printf(&%d\n&,j);
}
void btree_insert(bintree_node ** tree, bintree_node * item) {/*B树插入函数*/
& & & &
& & & & char *tmp1,*tmp2;
& & & & if(!(*tree)) {
& & & & & & & & *tree =
& & & & & & & & printf(&树插入:%s\n&,(*tree)-&key);
& & & & & & & &
& & & & }
& & & & printf(&被调用的键插入:%s 当前树的内容:%s\n&,item-&key,(*tree)-&key);
/*
& & & & tmp1=item-&
& & & & tmp2=(*tree)-&
& & & & for(i=0;i&12;++i,++tmp1,++tmp2){
& & & & if(*tmp1==*tmp2){
& & & & & & & & if (*tmp1==0){
& & & & & & & & & & & & i=2;
& & & & & & & & & & & &
& & & & & & & & }
& & & & }else if(*tmp1&*tmp2){
& & & & & & & & i=1;
& & & & & & & &
& & & & }else if(*tmp1&*tmp2){
& & & & & & & & i=-1;
& & & & & & & &
& & & & }
& & & & }
*/
& & & & i=strcmp(item-&key,(*tree)-&key);
& & & & if(i&0){
& & & & & & & & btree_insert(&((*tree)-&left), item);
& & & & } else if(i&0) {
& & & & & & & & btree_insert(&((*tree)-&right), item);
& & & & } else {
& & & & & & & & printf(&重复树插入:%s\n&,(*tree)-&key);
& & & & & & & & (*tree)-&size=item-&
& & & & & & & & (*tree)-&block=item-&
& & & & & & & & *tree =
& & & & }
}
bintree_node *btree_get(bintree_node ** tree,char *key){/*B树查找函数*/
& & & &
& & & & char *tmp1,*tmp2;
& & & & if(!(*tree)) {
& & & & & & & & puts(&没找到&);
& & & & & & & & return 0;/*为空*/
& & & & }
& & & & tmp1=tmp2=(*tree)-&
& & & & printf(&要找到的键:%s 树中的键:%s\n&,key,(*tree)-&key);
& & & & for(i=0;i&12;++i,++tmp1,++tmp2){
& & & & if(*tmp1==*tmp2){
& & & & & & & & if (*tmp1==0){
& & & & & & & & & & & & i=2;
& & & & & & & & & & & &
& & & & & & & & }
& & & & & & & & }else if(*tmp1&*tmp2){
& & & & & & & & & & & & i=1;
& & & & & & & & & & & &
& & & & & & & & }else if(*tmp1++&*tmp2++){
& & & & & & & & & & & & i=-1;
& & & & & & & & & & & &
& & & & & & & & }
& & & & }
& & & & if(i&0){
& & & & & & & & return btree_get(&(*tree)-&left, key);
& & & & } else if(i==1){
& & & & & & & & return btree_get(&(*tree)-&right, key);
& & & & } else{
& & & & & & & & puts(&找到了&);
& & & & & & & & return * /*找到了*/
& & & & }
}
inline void my_error(char *msg){/*自定义错误提示*/
& & & & printf(&\n%s\n&,msg);
& & & & exit(-1);
}
inline void my_fopen(FILE **fp,char *filename){/*文件打开*/
& & & & *fp= fopen(filename, &rb+&);
& & & & if( *fp == NULL ){
& & & & & & & & *fp= fopen(filename, &a&);
& & & & & & & & if( *fp == NULL ){
& & & & & & & & & & & & my_error(&file open error&);
& & & & & & & & }else{
& & & & & & & & & & & & fclose(*fp);
& & & & & & & & & & & & *fp= fopen(filename, &rb+&);
& & & & & & & & }
& & & & }
& & & & fseek(*fp,0,SEEK_END);
}
void my_close(treedb *atreedb){/*文件关闭*/
& & & & fclose(atreedb-&fp_index);
& & & & fclose(atreedb-&fp4);
& & & & fclose(atreedb-&fp16);
& & & & fclose(atreedb-&fp64);
& & & & fclose(atreedb-&fp256);
& & & & fclose(atreedb-&fp1024);
& & & & fclose(atreedb-&fp_4);
& & & & fclose(atreedb-&fp_16);
& & & & fclose(atreedb-&fp_64);
& & & & fclose(atreedb-&fp_256);
}
int get_treedb(char* name);
typedef struct {/*保存在index文件中的结构*/
& & & & char key[ 12];
& & & &
& & & &
& & & &
} db_
inline void read_empty_block(FILE *fp,int_list **list){/*读取可用空间*/
& & & & & & & &
& && &&&
& && &&&fseek(fp,0,SEEK_END);
& && &&&i=ftell(fp);
& && &&&fseek(fp,0,SEEK_SET);
& && &&&putchar('-');
& & & & & & & & while(i&4) {
& && && && &fread(&tmpptr, 4, 1, fp);
& && && && &int_list_insert(list,tmpptr);
& && && && &i-=4;
& & & && &&&}
}
void init_treedb(treedb **atreedb,char *db_dir_name){
& & & & char&&nametmp[100];
& & & & char *tmp2=db_dir_
& & & & int i=0;
& & int j=0;
& & & & db_index index_
& & & & bintree_node *node_
& & & & /*index_tmp=malloc(sizeof(db_index));*/
& & & & if(! mkdir(db_dir_name,777)){
& & & & & & & & & & & & my_error(&dir create error&);
& & & & }else{
& & & & & & & & puts(&dir open ok&);
& & & & }
& & & & while(*tmp2){
& & & & & & & & & & & & nametmp[i++]=*(tmp2++);
& & & & }
& & & & nametmp[i++]='/';
& & & & nametmp[i+1]='\0';
& & & & nametmp[i]='1';
& & & & my_fopen(& ((*atreedb)-&fp4),nametmp);
& & & & nametmp[i]='2';
& & & & my_fopen(& ((*atreedb)-&fp16),nametmp);
& & & & nametmp[i]='3';
& & & & my_fopen(& ((*atreedb)-&fp64),nametmp);
& & & & nametmp[i]='4';
& & & & my_fopen(& ((*atreedb)-&fp256),nametmp);
& & & & nametmp[i]='5';
& & & & my_fopen(& ((*atreedb)-&fp1024),nametmp);
& & & & nametmp[i]='0';
& & & & my_fopen(& ((*atreedb)-&fp_index),nametmp);
& & & & nametmp[i]='a';
& & & & my_fopen(& ((*atreedb)-&fp_4),nametmp);
& & & & nametmp[i]='b';
& & & & my_fopen(& ((*atreedb)-&fp_16),nametmp);
& & & & nametmp[i]='c';
& & & & my_fopen(& ((*atreedb)-&fp_64),nametmp);
& & & & nametmp[i]='d';
& & & & my_fopen(& ((*atreedb)-&fp_256),nametmp);
& & & & (*atreedb)-&indextree=NULL;
& & & & fseek((*atreedb)-&fp_index,0,SEEK_END);
& & & & i=ftell((*atreedb)-&fp_index);
& & & & fseek((*atreedb)-&fp_index,0,SEEK_SET);
& & & & printf(&index总长度是:%d\n&,i);
& & & & while(i&23) {
& & & && &&&node_tmp = malloc(sizeof(bintree_node));
& & & & & & & & j=0;
& & & & & & & & fread(&index_tmp, sizeof(db_index ), 1, (*atreedb)-&fp_index);
& & & && &&&while(node_tmp-&key[j]=index_tmp.key[j++]) ;
& & & & & & & & printf(&正在执行树插入:%d,%s\n&,i,node_tmp-&key);
& && &&&/*strcpy(node_tmp-&key,index_tmp.key);*/
& && &&&node_tmp-&size=index_tmp.
& && &&&node_tmp-&block=index_tmp.
& && &&&node_tmp-&left=NULL;
& && &&&node_tmp-&right=NULL;
& & & & & & & & if((*atreedb)-&indextree){
& & & & & & & & & & & & printf(&执行前检测,当前树的内容是:%s\n&,(*atreedb)-&indextree-&key);
& & & & & & & & }else{
& & & & & & & & & & & & puts(&执行前检测,当前树的内容是空白&);
& & & & & & & & }
& && &&&btree_insert(&((*atreedb)-&indextree),node_tmp);
& & & & & & & & i-=24;
& & & & }
& & (*atreedb)-&list4_empty=malloc(sizeof(int_list));
& & & & (*atreedb)-&list16_empty=malloc(sizeof(int_list));
& & & & (*atreedb)-&list64_empty=malloc(sizeof(int_list));
& & & & (*atreedb)-&list256_empty=malloc(sizeof(int_list));
& & & & read_empty_block((*atreedb)-&fp_4,&((*atreedb)-&list4_empty));
& & & & read_empty_block((*atreedb)-&fp_16,&((*atreedb)-&list16_empty));
& & & & read_empty_block((*atreedb)-&fp_64,&((*atreedb)-&list64_empty));
& & & & read_empty_block((*atreedb)-&fp_256,&((*atreedb)-&list256_empty));
& & & & /*free(index_tmp);*/
& & & & (*atreedb)-&get=&get_
& & & & (*atreedb)-&close=&my_& & & &
}
int haskey(char *name){/*产生HASH码 未用*/
&&unsigned int hi=701819;
&&char *key=
&&while (*key)
& & & & & & & & hi = ((hi&&3)&&+ hi) - (*key++);
&&
}
int get_treedb(char* name){/*数据库取数据库 未用*/
&&bintree_node *
&&return haskey(name)%SIZE;
}
void bak_set_treedb(treedb **db,char* name,int val){
& & & & bintree_node *
& & & & int block,size1,size2;
& & & & FILE *
& & & & void *int_tmp=0;
& & & & db_index index_
& & & & memset(index_tmp.key,0,12);
& & & & tmp=btree_get(&((*db)-&indextree),name);
& & & & if(tmp){
& & & & & & & & if(tmp-&size&256){
& & & & & & & & & & & & fp = (*db)-&fp1024;
& & & & & & & & } else if(tmp-&size==256){
& & & & & & & & } else if(tmp-&size&64){
& & & & & & & & & & & & fp = (*db)-&fp1024;
& & & & & & & & } else if(tmp-&size==64){
& & & & & & & & } else if(tmp-&size&16){
& & & & & & & & & & & & fp = (*db)-&fp1024;
& & & & & & & & } else if(tmp-&size==16){
& & & & & & & & } else if(tmp-&size&4){
& & & & & & & & & & & & fp=(*db)-&fp16;
& & & & & & & & & & & & block=int_list_pop(& ((*db)-&list16_empty));
& & & & & & & & & & & & if( block&0) {
& & & & & & & & & & & & & & & & fseek(fp,0,SEEK_END);
& & & & & & & & & & & & & & & & block=ftell(fp);
& & & & & & & & & & & & }else{
& & & & & & & & & & & & & & & & fseek(fp,block,SEEK_SET);
& & & & & & & & & & & & & & & & fseek((*db)-&fp_16,0,SEEK_END);
& & & & & & & & & & & & & & & & ftruncate(fileno((*db)-&fp_16),ftell((*db)-&fp_16)-4);
& & & & & & & & & & & & & & & & rewind((*db)-&fp_16);
& & & & & & & & & & & & }
& & & & & & & & & & & & if(int_tmp){
& & & & & & & & & & & & & & & & fwrite(int_tmp, tmp-&size, 1, fp);/*n写数据到新文件*/
& & & & & & & & & & & & }
& & & & & & & & & & & & fwrite(&val, sizeof(int), 1, fp);
& && && && &fflush(fp);
& & & & & & & & & & & & strcpy(index_tmp.key,name);
& & & & & & & & & & & & index_tmp.block=
& & & & & & & & & & & & tmp-&size+=4;
& & & & & & & & & & & & index_tmp.size=tmp-&
& & & & & & & & & & & & fwrite(&index_tmp, sizeof(db_index), 1, (*db)-&fp_index);
& && && && &fflush((*db)-&fp_index);
& & & & & & & & } else if(tmp-&size==4){ /*n长度超过4*/
& & & & & & & & & & & & fseek((*db)-&fp4,tmp-&block,SEEK_SET);
& & & & & & & & & & & & if(int_tmp){
& & & & & & & & & & & & & & & & free(int_tmp);
& & & & & & & & & & & & }
& & & & & & & & & & & & int_tmp=malloc(tmp-&size);
& & & & & & & & & & & & fflush((*db)-&fp4);
& & & & & & & & & & & & fflush((*db)-&fp16);
& & & & & & & & & & & & fread(int_tmp, tmp-&size, 1, (*db)-&fp4);
& & & & & & & & & & & & fwrite(&(tmp-&block), sizeof(int), 1, (*db)-&fp_4);/*n读旧数据*/
& && && && &fflush((*db)-&fp_4);
& & & & & & & & & & & & int_list_insert(&((*db)-&list4_empty),tmp-&block);
& & & & & & & & & & & & fp=(*db)-&fp16;
& & & & & & & & & & & &
& & & & & & & & & & & &
& & & & & & & & & & & & block=int_list_pop(& ((*db)-&list16_empty));
& & & & & & & & & & & & if( block&0) {
& & & & & & & & & & & & & & & & fseek(fp,0,SEEK_END);
& & & & & & & & & & & & & & & & block=ftell(fp);
& & & & & & & & & & & & }else{
& & & & & & & & & & & & & & & & fseek(fp,block,SEEK_SET);
& & & & & & & & & & & & & & & & fseek((*db)-&fp_16,0,SEEK_END);
& & & & & & & & & & & & & & & & ftruncate(fileno((*db)-&fp_16),ftell((*db)-&fp_16)-4);
& & & & & & & & & & & & & & & & rewind((*db)-&fp_16);
& & & & & & & & & & & & }
& & & & & & & & & & & & if(int_tmp){
& & & & & & & & & & & & & & & & fwrite(int_tmp, tmp-&size, 1, fp);/*n写数据到新文件*/
& & & & & & & & & & & & }
& & & & & & & & & & & & fwrite(&val, sizeof(int), 1, fp);
& && && && &fflush(fp);
& & & & & & & & & & & & strcpy(index_tmp.key,name);
& & & & & & & & & & & & index_tmp.block=
& & & & & & & & & & & & tmp-&size+=4;
& & & & & & & & & & & & index_tmp.size=tmp-&
& & & & & & & & & & & & fwrite(&index_tmp, sizeof(db_index), 1, (*db)-&fp_index);
& && && && &fflush( (*db)-&fp_index);
& & & & & & & & }
& & & & }else{
& & & & & & & & tmp = malloc(sizeof(bintree_node));
& & & & & & & & block=int_list_pop(& ((*db)-&list4_empty));
& & & & & & & & if( block &0) {/*n使用新空间*/
& & & & & & & & & & & & fseek((*db)-&fp4,0,SEEK_END);
& & & & & & & & & & & & block=ftell((*db)-&fp4);
& & & & & & & & }else{/*n使用回收的空间*/
& & & & & & & & & & & & fseek((*db)-&fp4,block,SEEK_SET);
& & & & & & & & & & & & fseek((*db)-&fp_4,0,SEEK_END);
& & & & & & & & & & & & ftruncate(fileno((*db)-&fp_4),ftell((*db)-&fp_4)-4);/*清除回收空间*/
& & & & & & & & & & & & rewind((*db)-&fp_4);
& & & & & & & & }
& & & & & & & & fwrite(&val, sizeof(int), 1, (*db)-&fp4);
& && &&&fflush((*db)-&fp4);
& & & & & & & & strcpy(index_tmp.key,name);
& & & & & & & & index_tmp.block=
& & & & & & & & index_tmp.size=4;
& & & & & & & & fwrite(&index_tmp, sizeof(db_index), 1, (*db)-&fp_index);
& && &&&fflush((*db)-&fp_index);
& & & & & & & & tmp-&size=4;
& & & & & & & & tmp-&block=
& & & & & & & & strcpy(tmp-&key,name);
& & & & & & & & btree_insert(&((*db)-&indextree),tmp);
& & & & }
& & & & free(int_tmp);
}
/*TEST*/
void set_treedb(treedb **db,char* name,int val){
& & & & printf(&现在要插入的键是:%s 值是:%d\n&,name,val);
& & & & bintree_node *tmp=NULL;
& & & & int block,size1,size2;
& & & & FILE *
& & & & FILE *fp0;
& & & & FILE *fp_
& & & & FILE *fp0_
& & & & void *int_tmp=0;
& & & & int blocksize=0;
& & & & int_list **list_empty,**list_empty0;
& & & & int isnew=0;
& & & & int offset=0;/*根据大小来确定*/
& & & & db_index index_
& & & & memset(index_tmp.key,0,12);
& & & & tmp=btree_get(&((*db)-&indextree),name);
& & & & & & & & if(!tmp){
& & & & & & & & & & & & isnew=1;
& & & & & & & & & & & & tmp = malloc(sizeof(bintree_node));
& & & & & & & & & & & & offset=tmp-&size=0;
& & & & & & & & & & & & fp0=NULL;
& & & & & & & & & & & & fp=(*db)-&fp4;
& & & & & & & & & & & & fp_empty=(*db)-&fp_4;
& & & & & & & & & & & & list_empty=&((*db)-&list4_empty);
& & & & & & & & } else if (tmp-&size ==4){
& & & & & & & & & & & & fp0=(*db)-&fp4;
& & & & & & & & & & & & fp=(*db)-&fp16;
& & & & & & & & & & & & fp_empty=(*db)-&fp_16;
& & & & & & & & & & & & fp0_empty=(*db)-&fp_4;
& & & & & & & & & & & & list_empty=&((*db)-&list16_empty);
& & & & & & & & & & & & list_empty0=&((*db)-&list4_empty);
& & & & & & & & & & & & blocksize=16;
& & & & & & & & } else if(tmp-&size&16){
& & & & & & & & & & & & offset=tmp-&
& & & & & & & & & & & & fp0=NULL;
& & & & & & & & & & & & fp=(*db)-&fp16;
& & & & & & & & & & & & fp_empty=(*db)-&fp_16;
& & & & & & & & & & & & list_empty=&((*db)-&list16_empty);
& & & & & & & & & & & & blocksize=16;
& & & & & & & & } else if(tmp-&size==16){
& & & & & & & & & & & & fp0=(*db)-&fp16;
& & & & & & & & & & & & fp=(*db)-&fp64;
& & & & & & & & & & & & fp0_empty=(*db)-&fp_16;
& & & & & & & & & & & & fp_empty=(*db)-&fp_64;
& & & & & & & & & & & & list_empty=&((*db)-&list64_empty);
& & & & & & & & & & & & list_empty0=&((*db)-&list16_empty);
& & & & & & & & & & & & blocksize=64;
& & & & & & & & } else if(tmp-&size&64){
& & & & & & & & & & & & offset=tmp-&
& & & & & & & & & & & & fp0=NULL;
& & & & & & & & & & & & fp=(*db)-&fp64;
& & & & & & & & & & & & fp_empty=(*db)-&fp_64;
& & & & & & & & & & & & list_empty=&((*db)-&list64_empty);
& & & & & & & & & & & & blocksize=64;
& & & & & & & & } else if(tmp-&size==64){
& & & & & & & & & & & & offset=0;
& & & & & & & & & & & & fp0=(*db)-&fp64;
& & & & & & & & & & & & fp=(*db)-&fp256;
& & & & & & & & & & & & fp0_empty=(*db)-&fp_64;
& & & & & & & & & & & & fp_empty=(*db)-&fp_256;
& & & & & & & & & & & & list_empty=&((*db)-&list256_empty);
& & & & & & & & & & & & list_empty0=&((*db)-&list64_empty);
& & & & & & & & & & & & blocksize=256;
& & & & & & & & } else if(tmp-&size&256){
& & & & & & & & & & & & offset=tmp-&
& & & & & & & & & & & & fp0=NULL;
& & & & & & & & & & & & fp=(*db)-&fp256;
& & & & & & & & & & & & fp_empty=(*db)-&fp_256;
& & & & & & & & & & & & list_empty=&((*db)-&list256_empty);
& & & & & & & & & & & & blocksize=256;
& & & & & & & & } else if(tmp-&size==256){
& & & & & & & & & & & & fp0=(*db)-&fp256;
& & & & & & & & & & & & fp=(*db)-&fp1024;
& & & & & & & & & & & & fp0_empty=(*db)-&fp_256;
& & & & & & & & & & & & fp_empty=NULL;
& & & & & & & & & & & & list_empty=NULL;
& & & & & & & & & & & & list_empty0=&((*db)-&list256_empty);
& & & & & & & & & & & & blocksize=1024;
& & & & & & & & } else if(tmp-&size&256){
& & & & & & & & & & & & fp0=NULL;
& & & & & & & & & & & & fp=(*db)-&fp1024;
& & & & & & & & & & & & fp_empty=NULL;
& & & & & & & & & & & & list_empty=NULL;
& & & & & & & & & & & & blocksize=1024;
& & & & & & & & & & & & list_empty0=NULL;
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & int block_tmp=tmp-&
& & & & & & & & & & & & & & & & offset=(tmp-&size)%1020;
& & & & & & & & & & & & & & & & for(i=tmp-&i&1020;i-=1020){
& & & & & & & & & & & & & & & & & & & & fseek(fp,block_tmp+1020,SEEK_SET);
& & & & & & & & & & & & & & & & & & & & fread(&block_tmp, sizeof(int), 1, fp);
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & offset=block_tmp+offset-tmp-&
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & fflush(fp);
& & & & & & & & fflush(fp_empty);
& & & & & & & & printf(&块区大小值是:%d\n&,blocksize);
& & & & & & & & if(fp0){ /* 说明是从旧块复制数据 新块offset=0*/
& & & & & & & & & & & & puts(&要从旧块区复制数据了&);
& & & & & & & & & & & & fflush(fp0);
& & & & & & & & & & & & fflush(fp0_empty);
& & & & & & & & & & & & fseek(fp0,tmp-&block,SEEK_SET);
& & & & & & & & & & & & int_tmp=malloc(tmp-&size);
& & & & & & & & & & & & fread(int_tmp, tmp-&size, 1, fp0);
& & & & & & & & & & & & fseek(fp0_empty,0,SEEK_END);/*n空白空间产生了*/
& & & & & & & & & & & & fwrite(&(tmp-&block), sizeof(int), 1, fp0_empty);
& && && && &fflush(fp0_empty);
& & & & & & & & & & & & int_list_insert((list_empty0),tmp-&block);
& & & & & & & & & & & & block=int_list_pop( (list_empty));
& & & & & & & & & & & & if( block&0) {
& & & & & & & & & & & & & & & & fseek(fp,0,SEEK_END);
& & & & & & & & & & & & & & & & block=ftell(fp);
& & & & & & & & & & & & & & & & printf(&当前块区:%d\n&,block);
& & & & & & & & & & & & & & & & if(blocksize){
& & & & & & & & & & & & & & & & & & & & block+=(blocksize-block%blocksize)%
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & printf(&取余后块区:%d\n&,block);
& & & & & & & & & & & & } else {/*n空白空间得到了*/
& & & & & & & & & & & & & & & & fseek(fp,block,SEEK_SET);
& & & & & & & & & & & & & & & & fseek(fp_empty,0,SEEK_END);
& & & & & & & & & & & & & & & & ftruncate(fileno(fp_empty),ftell(fp_empty)-4);
& & & & & & & & & & & & & & & & rewind(fp_empty);
& & & & & & & & & & & & }
& & & & & & & & }else if (!(tmp-&size)){
& & & & & & & & & & & & printf(&为什么得不到块区呢?:%d\n&,tmp-&block);
& & & & & & & & & & & & block=int_list_pop( (list_empty));
& & & & & & & & & & & & if( block&0) {
& & & & & & & & & & & & & & & & fseek(fp,0,SEEK_END);
& & & & & & & & & & & & & & & & block=ftell(fp);
& & & & & & & & & & & & & & & & printf(&当前块区:%d\n&,block);
& & & & & & & & & & & & & & & & if(blocksize){
& & & & & & & & & & & & & & & & & & & & block+=(blocksize-block%blocksize)%
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & printf(&取余后块区:%d\n&,block);
& & & & & & & & & & & & } else {/*n空白空间得到了*/
& & & & & & & & & & & & & & & & fseek(fp,block,SEEK_SET);
& & & & & & & & & & & & & & & & fseek(fp_empty,0,SEEK_END);
& & & & & & & & & & & & & & & & ftruncate(fileno(fp_empty),ftell(fp_empty)-4);
& & & & & & & & & & & & & & & & rewind(fp_empty);
& & & & & & & & & & & & }
& & & & & & & & }else{
& & & & & & & & & & & & block=tmp-&
& & & & & & & & }
& & & & & & & & printf(&键:%s 值:%d 大小:%d 旧块区:%d 新块区:%d 偏移:%d\n&,name,val,tmp-&size,tmp-&block,block,offset);
& & & & & & & & /*
& & & & & & & & if( tmp-&block) {&&有块信息
& & & & & & & & & & & & if(!fp0){
& & & & & & & & & & & & & & & & block=tmp-&
& & & & & & & & & & & & & & & & fseek(fp,block+offset,SEEK_SET);
& & & & & & & & & & & & }
& & & & & & & & } else { 说明是新数据,重新分配块
& & & & & & & & & & & & block=int_list_pop( (list_empty));
& & & & & & & & & & & & if( block&0) {没空白空间可用
& & & & & & & & & & & & & & & & fseek(fp,0,SEEK_END);
& & & & & & & & & & & & & & & & block=ftell(fp);
& & & & & & & & & & & & } else{ 空白空间得到了
& & & & & & & & & & & & & & & & fseek(fp,block,SEEK_SET);
& & & & & & & & & & & & & & & & fseek(fp_empty,0,SEEK_END);
& & & & & & & & & & & & & & & & ftruncate(fileno(fp_empty),ftell(fp_empty)-4);
& & & & & & & & & & & & & & & & rewind(fp_empty);
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & */
& & & & & & & & fseek(fp,block+offset,SEEK_SET);
& & & & & & & & if(int_tmp){
& & & & & & & & & & & & fwrite(int_tmp, tmp-&size, 1, fp);
& & & & & & & & }
& & & & & & & & fwrite(&val, sizeof(int), 1, fp);
& && &&&fflush(fp);
& & & & & & & & strcpy(index_tmp.key,name);
& & & & & & & & index_tmp.block=
& & & & & & & & tmp-&size+=4;
& & & & & & & & index_tmp.size=tmp-&
& & & & & & & & index_tmp.nowvalue=
& & & & & & & & fwrite(&index_tmp, sizeof(db_index), 1, (*db)-&fp_index);
& && &&&fflush((*db)-&fp_index);
& & & & & & & & if(isnew==1){
& & & & & & & & & & & & tmp-&block=
& & & & & & & & & & & & strcpy(tmp-&key,name);
& & & & & & & & & & & & btree_insert(&((*db)-&indextree),tmp);
& & & & & & & & }
& & & & & & free(int_tmp);
}
/*END TEST*/
int main(){
& & & & char db_dir_name[30]=&/tmp/testdb&;
& & int i=0;
& & & & treedb *testdb=malloc(sizeof(treedb));
& & & & init_treedb(&testdb,db_dir_name);
& & puts(&init ok&);
& & for(i=0;i&1;i++){
& & & & set_treedb(&testdb,&aaa&,'A');
& & & & set_treedb(&testdb,&bbb&,'B');
& & }
& & & & btree_print(testdb-&indextree,i);
& & & & /*my_close(testdb);*/
& & puts(&end&);
& & & & return 0;
}复制代码
[ 本帖最后由 samon_fu 于
19:10 编辑 ]
UID空间积分0 积分7899阅读权限70帖子精华可用积分7899 信誉积分4 专家积分15 在线时间1624 小时注册时间最后登录
富足长乐, 积分 7899, 距离下一级还需 101 积分
帖子主题精华可用积分7899 信誉积分4 专家积分15 在线时间1624 小时注册时间最后登录
论坛徽章:0
代码斜体了
估计是没有选择禁用Diszuz!代码 这个选项的结果
如果不选,代码会出现偏差的
请楼上的处理一下你粘帖的代码

我要回帖

更多关于 电脑开机后半天没反应 的文章

 

随机推荐