博文

目前显示的是 三月, 2006的博文

读取以空格分隔的字符串

朋友让我帮忙写一个程序,从一个文件中读取以空格分隔的字符串数据.这看起来似乎是一件很简单的事情,但是我实际写的时候却遇到了不少麻烦例如,如果是在win下,locale必须设置为"chinese-simplified"而不是"zh_CN.GB2312"#include <iostream>#include <fstream>#include <iterator>#include <locale>#include <string>#include <vector>///每个字符串的最大长度,包括'\0'#define MAX_LENTH_PER_STRING 1024///文件的locale#define STREAM_LOCALE "chinese-simplified"template <typename T> std::vector<std::basic_string<T> > readData(std::basic_istream<T>& is); intmain(int argc,char* argv[]){ std::wifstream fs("C:\\test.txt"); std::vector<std::wstring> datastrings; try{ fs.imbue(std::locale(STREAM_LOCALE)); datastrings=readData<wchar_t>(fs); } catch (conststd::ios::failure& error) { std::cerr << "I/O exception: " << error.what() << std::endl; fs.close(); return EXIT_FAILURE; } catch (conststd::exception& error) { std::cerr << "standard exception…

装硬盘的经验……

0:46 2006-3-19从昨天到今天我做了什么一点来说吧,昨天中午取了钱去电脑城,然后去朋友的店,结果发现他不在。一屋子的人我一个人都不认识,我还差点意味我走错了呢。让那个女孩帮我问问了硬盘的价格,120G或者160G的。结果是说8M cache PATA的硬盘没有,一般都是2M cache的。郁闷,奔二楼,我记得那以前有一家硬盘专卖,结果怎么找也找不到,然后在一楼和二楼兜了N圈后又回来这里,发现翠翠回来了。我终于确信我没有走错不过是人换了而已。第一件事情就是招呼我吃瓜子,可惜啊,这种瓜子我不会磕,很尴尬。把硬盘的事情给她一说,她打个电话一问,有货。然后我说有货就拿,她说好。然后呢,她真是忙啊!根本顾不上理我似的。嘿,好歹我也是买东西的嘛。嗯,等了很久很久才拿来。我也懒得讲价之类的了,按着他们订货单上的价格就付了钱。然后看有摄像头,就买了一个。她挑了一个把摄像头一插说让我看看,然后就继续忙她的去了。我看了看,嗯,人就是个人嘛,有啥好看的。我也不会挑。我给她你看着好就是了,然后还是,交钱走人。不过我知道无论如何这已经是最低价了,所以嘛,人就图个实在,既然如此那就拿东西走人好了。硬盘是Maxtor PATA133 8M Cache 160G,盒装三年质保。因为我现在的硬盘也是Maxtor的,所以干脆还是买了一个同样的牌子。然后去4楼买硬盘线。老板娘问我要哪种,有便宜的有原装的,有2块的有5块的有8块的。我傻傻的,反正也不会挑,就本着不买最好但买最贵的原则,买了一个所谓的原装七彩虹8块的。我看着线一点都不好,被那恶毒女人欺骗了几句话,就付帐走人了。结果刚回来就坏了。郁闷。为什么坏了呢?因为我插了硬盘,然后没插硬盘电源就开机,当然监测不出来硬盘啦,我还以为数据线没有插好,就拔出来再插,刚一拔,就烂了,郁闷……然后就在宿舍楼下买了个新的,3块,但是超级结实,哎呀,真是没话说。楼下的老板居然不知道这是干嘛的,反正他问我要4块我只给3块,然后就成交了。然后就是装系统之类的。忙到现在。
把我的教训写下来,供大家参考。我的目的是把老硬盘上的数据复制到新硬盘来,然后拿老硬盘去修。不过老硬盘上的XP已经坏了需要重装。ok,给新硬盘分区装系统(XP)一切顺利。然后上网下驱动打系统补丁。结果说我的XP是盗版不能更新,我一看用以前禁止加载项的方式骗已经不行了,然后就去注册表随便删了两行,运…

fdisk的麻烦

我似乎终于明白我为什么在新硬盘上装不上FreeBSD了,问题出在CHS上。
我的新硬盘是Maxtor PATA133,2006年 FEB 16出厂,160G
物理的CHS是:
C:317632
H:16
SPT:63
Total Sectors:317632x16x63=320173056
这个数字是我从Maxtor的DOS磁盘检测工具中读出来的,与磁盘标签上的完全吻合
但是这是物理参数,C=317632,这个数目太大了,BIOS无法接受。
由于我的硬盘是IDE的PATA,主板是nForce2,BIOS的解决方案是保持H不变,增大SPT到255
也就是说,CHS变成了
C':65535
H':16
SPT':255
Total Sectors=65535x16x255=267382800
这里就出现了一个很严重的问题。
SPT'/SPT=255/63不是整数,于是C'=317632x16x63/255/16=78473
但是我的BIOS只能识别到65535,于是实际可用的Sectors就只有267382800个,可怕
然后其次是,
FreeBSD从来都是用来服务器上的,大多数设置都是针对服务器针对SCSI硬盘的。
SCSI硬盘的解决方式一般是把SPT保持不变,还是63,而增大H到255,从而降低C.
于是FreeBSD的fdisk要求SPT必须小于等于63
我在disklabel的时候,发生意外的io错误,我仔细看,它试图读取某个tracker的160号扇
区上的supper block的备份。而fdisk分区的时候,SPT设置的是63,然后就出错了。
由于disklabel失败,于是mount /dev/ad0s3a /mnt
的时候,就出现incorrect supper block
这个问题从FreeBSD5.1的时候就有人在maillist中提出了。我今天在6.0下测试,问题依旧
“In the meantime, the workaround for anyone experiencing this problem is to
go into their BIOS and set the hard drive to "User" mode, and manually enter
the same C/H/S settings that FDisk ca…