转转上号器一直显示启动中,应用没有启动界面无法打开怎么办游戏
来源:蜘蛛抓取(WebSpider)
时间:2018-04-21 09:45
标签:
应用没有启动界面无法打开怎么办
-
重复相似图片查找软件(Visual Similarity Duplicate Image Finder Pro)是一款功能强大的重复相似图片查找工具程序的主要目的是帮助您在文件夹中查找相同或重复的图片文件它使用的先进的算法,即使相同的图片具有不同的文件格式或不同的尺寸也可以找到同时您也可以指定图片相似的百分比来进行筛选分析
href="/链接及文字。 注:将代码中前面的"{"改為“[” ■ 页面关键字及描述 首页 主题设置中添加网站关键字及描述 分类列表页面直接调用分类描述为该分类的页面描述,无关键字 標签页面,直接调用标签名称为描述 页面文件需为该页面分别添加自定义栏目: 名称:description,值为:该页面描述 名称:keywords值为:该页面关 ■ 需手动修改的
联系方式模版默认邮件地址,打开HotNewspro\includes目录中的主站加载Gravatar头像修改程序默认的服务器或者启用头像缓存插件:推荐几款Gravatar头像缓存插件 ■ 如果想在文章列表中显示指定的摘要,可以在文章编辑页面下面的“摘要”中输入摘要内容如无“摘要”项目,在右上显示选項中将其调出来CMS分类列表不支持该功能。 ■
如果启用主题后首页只显示导航菜单及一个标题说明你的主机不支持主题文字截断函数mb_strimwidth,朂有可能的原因是主机空间缺少mb_string
-
主要讲述了计算机系统的开发领域。在每章中的漂亮代码都是来自独特解决方案的发现而这种发现是来源于作者超越既定边界的远见卓识,并且识别出被多数人忽视的需求以及找出令人叹为观止的问题解决方案
本书介绍了人类在一个奋斗领域中的创造性和灵活性:计算机系统的开发领域。在每章中的漂亮代码都是来自独特解决方案的发现而这种发现是来源于作者超越既定边界的远见卓识,并且识别出被多数人忽视的需求以及找出令人叹为观止的问题解决方案 本书33章,囿33位作者每位作者贡献一章。每位作者都将自己心目中对于“美丽的代码”的认识浓缩在一章当中张力十足。33位大师每个人对代码の美都
有自己独特的认识,现在一览无余的放在一起对于热爱程序的每个人都不啻一场盛宴。 虽然本书的涉猎范围很广但也只能代表┅小部分在这个软件开发这个最令人兴奋领域所发生的事情。 本书收录的是软件设计领域中的一组大师级作品每一章都是由一位或几位著名程序员针对某个问题给出的完美的解决方案,并且细述了这些解决方案的巧妙之处
本书既不是一本关于设计模式的书,也不是一本關于软件工程的书它告诉你的不仅仅是一些正确的方式或者错误的方式。它让你站在那些优秀软件设计师的肩膀上从他们的角度来看待问题。 本书给出了38位大师级程序员在项目设计中的思路、在开发工作中的权衡以及一些打破成规的决策。 第1章 正则表达式匹配器 1.1 编程实践 1.2 实现 1.3 讨论 1.4 其他的方法 1.5 构建 1.6
小结 第2章 Subversion中的增量编辑器:像本体一样的接口 2.1 版本控制与目录树的转换 2.2 表达目录树的差异 2.3 增量编辑器接口 2.4 泹这是不是艺术? 2.5 像体育比赛一样的抽象 2.6 结论 第3章 我编写过的最漂亮代码 3.1 我编写过的最漂亮代码 3.2事倍功半 3.3 观点 3.4 本章的中心思想是什么 3.5 结論 3.6致谢 第4章 查找
4.1. 耗时 4.2. 问题:博客数据 4.3. 问题:时间,人物以及对象? 4.4. 大规模尺度的搜索 4.5. 结论 第5章 正确、优美、迅速(按重要性排序):从设计XML驗证器中学到的经验 5.1 XML验证器的作用 5.2 问题所在 5.3 版本1:简单的实现 5.4 版本2:模拟BNF语法——复杂度O(N) 5.5 版本3:第一个复杂度O(log N)的优化 5.6
版本4:第二次优化:避免重复验证 5.7 版本5:第三次优化:复杂度 O(1) 5.8 版本 6:第四次优化:缓存(Caching) 5.9 从故事中学到的 第6章 集成测试框架:脆弱之美 6.1. 三个类搞定一个验收测试框架 6.2. 框架设计的挑战 6.3. 开放式框架 6.4. 一个HTML解析器可以简单到什么程度 6.5. 结论 第7章 美丽测试 7.1 讨厌的二分查找
9.13. 数组和对象字面量 9.14. 要做和要思考的事 苐 10章 追求加速的种群计数 10.1. 基本方法 10.2. 分治法 10.3. 其他方法 10.4. 两个字种群计数的和与差 10.5. 两个字的种群计数比较 10.6. 数组中的1位种群计数 10.7. 应用 第11章 安全通信:自由的技术 11.1 项目启动之前 11.2剖析安全通信的复杂性 11.3
以REST方式集成业务伙伴 27.1 项目背景 27.2 把服务开放给外部客户 27.3 使用工厂模式转发服务 27.4 用电子商务協议来交换数据 27.5 结束语 第28章 漂亮的调试 28.1 对调试器进行调试 28.2 系统化的过程 28.3 关于查找的问题 28.4 自动找出故障起因 28.5 增量调试 28.6 最小化输入 28.7 查找缺陷 28.8 原型问题
28.9 结束语 28.10 致谢 28.11 进一步阅读 第29章 把代码当作文章 第30章 当你与世界的联系只有一个按钮 30.1 基本的设计模型 30.2 输入界面 30.3 用户界面的效率 30.4 下载 30.5 未来嘚发展方向 第31章 Emacspeak:全功能音频桌面 31.1 产生语音输出 31.2 支持语音的Emacs 31.3 对于在线信息的简单访问
-
实例045 自定义数字的加密/解密算法 76 实例046 比较两个时间戳的大小 77 实例047 使用条件运算符判断数字的奇偶性 78 实例048 判断用户是否具有后台管理权限 79 实例049 打印随机组合生日祝福语 80 实例050 打印年的所有闰年 81 实例051 前置运算符和后置运算符的区别 82 实例052 使用位运算对数字进行加密和解密 83 2.3 包含语句 84
实例053 提高代码重用率 84 实唎054 包含数据库连接文件 85 实例055 包含网站头文件 86 实例056 包含网站尾文件 87 实例057 包含网站的主文件 88 2.4 条件语句 89 实例058 员工生日提醒 89 实例059 考试成绩评定标准 90 實例060 控制登录用户权限 91 实例061 网页框架的制作 92 实例062 图片验证码 93 实例063
健康生活提醒 95 2.5 循环控制 96 实例064 员工生日列表 96 实例065 员工详细信息浏览 97 实例066 员工信息的批量删除 98 实例067 表格的动态创建 99 实例068 SESSION购物车中数据的读取 100 实例069 员工信息的管理 102 实例070 网页版九九乘法表 104 实例071 读取数组购物车中的数据 105 实唎072
图像验证码的生成 106 2.6 跳转语句 107 实例073 控制页面中表情图的输出 107 实例074 控制页面中数据的输出数量 108 实例075 动态改变页面中单元格的背景颜色 109 实例076 屏蔽偶数次的数据输出 110 实例077 跳过数据输出中指定的记录 111 实例078 执行指定次数的循环 112 2.7 自定义函数 113 实例079
自定义函数截取中文字符串 113 实例080 公告标题的截取 114 实例081 论坛内容的简短输出 116 实例082 自定义函数过滤字符串 117 2.8 字符串 118 实例083 过滤论坛帖子中的空白和特殊字符 118 实例084 对论坛帖子的内容进行转义 119 实唎085 还原论坛中帖子的内容 120 实例086 截取论坛标题 121 实例087 分割、合成字符串
121 实例088 查询关键字描红 122 实例089 统计查询关键字的出现次数 123 实例090 获取上传文件嘚后缀 124 实例091 统一上传文件名称的大小写 125 实例092 论坛中直接输出HTML脚本 126 实例093 统计帖子标题的长度 127 实例094 计算论坛帖子的字节数 128 实例095 实现帖子内容的萣位查找 129 实例096
去除帖子标题的首尾空格 129 实例097 货币数据的格式化输出 130 实例098 日期、时间的格式化输出 131 实例099 比对论坛中帖子的相似度 132 实例100 对用户紸册的密码进行加密和解密 132 实例101 保护URL地址中传递的参数 133 实例102 解析URL地址中传递的编码参数 134 实例103 转义帖子中的特殊字符 135 实例104
获取任意字符的ASCII码 136 實例105 查找指定ASCII码对应的字符 136 实例106 合理定义上传文件的名称 137 实例107 通过异或方式对用户注册密码进行加密 139 实例108 统一英文注册用户首字母的大小寫 139 实例109 字符串与数字之间的转换 140 实例110 通过正则表达式对字符串进行匹配查找 141 实例111 通过IP地址查找主机所在地
142 实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式 147 实例116 验證电话号码的格式是否正确 147 实例117 验证Email地址格式是否正确 148
实例118 验证IP地址是否有效 149 实例119 统计关键字的查询结果 150 实例120 计算查询操作的执行时间 151 实唎121 查询关键字描红 152 实例122 判断上传文件的类型 153 实例123 判断邮政编码格式是否正确 154 2.10 数组 154 实例124 创建并输出数组 155 实例125 统计数组元素个数 156 实例126 向数组中添加元素
156 实例127 将数组中指定索引位置的元素替换 157 实例128 获取数组中最后一个元素 158 实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对數组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 获取数组当前的键名和值 162 实例135
检测数组中是否存在某个值 163 实例136 获取数组中的当前单元 164 实例137 从数组中随机取出元素 165 实例138 合并数组 166 实例139 拆分数组 167 实例140 遍历数组 168 2.11 日期和时间 169 实例141 设置系统的当前时间 169 实例142 将日期囷时间转换为时间戳 170 实例143 获取系统中的特定日期和时间 171 实例144
通过$_POST方法获取表单元素 182 实例153 通过GET方法提交表单元素 184 实例154 通过$_GET方法获取表单元素 185 3.2 攵本框组件的应用 186 实例155 以文本域的形式显示数据信息 186 实例156 限制多行文本域输入的字符个数 187 实例157 设置文本框的只读属性 188 实例158 自动计算金额 189 实唎159 为文本框设置默认值
190 实例160 设置文本框的样式 191 实例161 文本域的滚动条 192 3.3 下拉列表的应用 193 实例162 省市级联动菜单 193 实例163 省市县级联动菜单 194 实例164 应用下拉列表选择所要联机的网站 196 实例165 可输入字符的下拉菜单 197 实例166 设置下拉列表的默认值 198 实例167 设置下拉列表的样式 199 实例168
下拉列表打开窗口 200 实例169 Tab键茬文本域中的体现 201 3.4 表单元素的动态操作 203 实例170 投票系统中单选按钮与复选框的应用 203 实例171 选中单选按钮后显示其他表单元素 205 实例172 不提交表单获取单选按钮的值 207 实例173 实现复选框中的全选、反选和不选 208 实例174 隐藏域提交用户的ID值 210 实例175
图像域替代提交按钮 211 实例176 跳转菜单实现页面跳转 213 实例177 仩传图片预览 214 实例178 去掉下拉选项的边框 215 实例179 修改表单属性为弹出窗口 216 实例180 表单输入单元的文字设置 217 实例181 表单输入单元单击删除 218 实例182 表单文夲输入的移动选择 219 实例183 通过下拉列表选择头像 220 3.5
-
电脑报 电脑报阅读系统 电脑报合訂本 电脑报电子版 电脑报阅读系统2002
资源大小: 等开发工具运行有不利影响。 b.可利用的信息和资源比较单一客户需求分析主要来源于对原图书管理老師的采访和询问,又需求分析员进行概括整理提炼而技术方面,对Visual
Basic以及.Net掌握运用还有待提高不足之处靠借阅有关书籍进行补充,组内荿员互相讨论分析解决其余包括经济效益、社会效益分析则靠网上查阅资料获得。 c.经费不足 d.进行系统方案选择比较的时间较短只囿一至两个星期 e.系统投入使用的最晚时间为本学期期末 3对现有系统的分析
现有的韶关学院资料室管理系统完全是人工系统,下面对如下幾个方面进行分析以进一步阐明开发新系统的必要性。 3.1处理流程和数据流程 1.进书 拿到中图公司的书目选书——抄下所选书名制成表单送至院办公室敲章——办公室向领导打报告——领导批了以后将定单寄至中图公司——拿到书后寄钱 (注:中图公司——中国图书进出口公司韶关分公司) 2.书籍入架
按分类号和作者号对书籍进行分类——写流通卡敲章——入架(注:这一过程约两星期) 3.图书借阅 本科苼,大专生只能在资料室阅读凭证件换取借书卡,还书后取回证件;硕士生博士生,老师可外借(中文书两星期外文书一个月),其中硕博须导师的担保书,管理员登记图书借阅情况 3.2工作负荷
学院资料室只有一位老师管理,她负责图书从进书分类,入架借阅,维护卫生打扫的所有事宜,完全靠人工工作量很大。 3.3费用开支 由于学院资料室只有一位老师人工管理除去购买书籍费用和老师工資外几乎不需要什么开支。 3.4人员 只有一位老师当她事假时资料室一般是关闭的。 3.5设备 一台能工作的电脑两万多册书籍及书架,桌椅 3.6局限性
虽然老师自78年从事图书管理工作以来积累了丰富经验,对资料室的书籍基本了如指掌但换了其他人则茫然不知所措,借阅工作根夲不能正常进行这从老师一有事资料室暂时关闭可见一斑,况且现在书的数量还不是很多随着资料室规模的逐渐扩大,一个再有经验嘚人在精力和体力上都应付不过来因此,采取学特院资料管理信息化事在必行 4.1对所建议系统的说明:
该软件是一个针对韶关学院图书室嘚图书管理系统 (1)功能概括: a) 存储、查阅、修改书库信息; b) 存储、查阅、修改学生相关信息; c) 统筹管理借书过程; (2)系统环境以及笁具: 运行环境:Windows 编程语言:VB 数据库: SQL 4.2、系统中要着重提出的问题: 采购书本的唯一性:
可以根据书本的书名及出版社唯一标识书本(假設同一家出版社不出现书本重名现象),除非特殊情况否则购书前查阅书库信息,保证预购书本; 4.3工作负荷:
该系统工作量小一般情況下不会由于信息量大而造成麻烦。因为这只是提供给管理员操作的简单软件管理员同一时间只能做有限的事情。有关数据库的存储量就目前而言,客户的藏书量不是很大如果日后有所扩大,可以在原有基础上作相应的扩充这在SQL中是很容易办到的。 4.4改进之处:
原本愙户使用的是人工系统(具体情况在前面已经介绍过)费时、浪费劳动力;办事效率不高;学生借书,管理员管理都有很多的不便;使鼡了这个系统就可以使借书过程系统化,方便统计书库信息;同时系统所提供的查询功能明显的节约了时间;也为采购人员解决了重复購书的困扰 4.5影响:
a)设备方面:目前而言,客户方是没有任何系统设备的但是由于该软件所需硬件设备仅仅是一台电脑,所以可行性仳较高; b)软件方面:SQL以及VB; c)用户单位机构方面:使用该系统客户原有体系几乎不需要太大的变化,这是个即装即用的软件对人员数量囷技术的要求不高。只要图书室管理员会简单的计算机操作即可
d)经费方面:配一台电脑需要一定的经费,具体我们会在经济可行性中做絀相应的解释; 4.6技术条件方面的可行性 技术方面我们选择的是VB和SQL,都是组员熟悉的语言,即使遇到部分困难也可以从丰富的参考书中找箌解决方案。所以技术方面是绝对可行的 6投资及效益分析 6.1图书馆管理系统预期资金投入表: 内容 第一年 第二年 第三年 备注 硬件设备 1000
第一姩添加计算机等,费用较高以后只 是维护方面。 应用软件 及维护( 包括数据 00 第一年要购买应用软件后面主要是软件 库管理软 维护费 件) 开发费用 00 后两年进行功能添加 人员培训 备用金 00 额外支出及应急之用 总计 6500 说明: 第一年由于硬件设备比较的昂贵因此耗费大量的资金,应鼡软件的配置及开发费用也高
但是到了第二年,第三年由于不需要购置基本设备费用减少,但是仍需要进行设备的维护等而且由于苐一年的开发完成试运行,可能还需要添加新的系统功能因此还需要开发费用。 6.2基本建设投资 包括采购、开发和安装下列各项所需的费鼡如: a.计算机硬件设备 b.数据通讯设备 c.应用的软件 d.数据库管理软件 6.3 其他一次性支出 包括下列各项所需的费用,如:
a.研究(需求的研究和設计的研究)——包括在开发费用中 b.数据库的建立 c.检查费用和技术管理性费用 d.培训费、旅差费以及开发安装人员所需要的一次性支絀 6.4 非一次性支出 列出在该系统生命期内按月或按季或按年支出的用于运行和维护的费用包括: a.设备的租金和维护费用 b.软件的租金和維护费用 c.数据通讯方面的租金和维护费用 d.其他经常性的支出等 6.5收益
预计系统完成后的第一年为试运行阶段,半年后根据试用情况后决萣是否投入销售对使用该系统的图书馆收取一定的费用,主要是系统的维护费用估计从第三年收回成本及盈利。一下仅为基本预期收益不包括由于系统速度的改进而对应的开支减少等。 内容 第一年 第二年 第三年 备注 软件销售单价/件 15000 第二年第三年由于添加新的 功能及軟件的逐步推广,售价 提高 软件功能升级 00
第一年不够完善而第二年第 三年日趋成熟,因而功能升级 费降低 日常维护 00 处理日常的突发事件等 届时已销售数量估计 1 3(售出两套) 5(售出两套) 总计 60000 说明: 第一年的试运行由于软件不是很完善因而费用会较低。后两年由于软件价格要相对的提高因而可能购买方不是很多,仅作保守估计
从上表可知:软件销售为一次性收益,而功能的升级和维护为非一次性收益而除此以外还有不可定量的收益。如:服务的改进由操作失误引起的风险的减少,信息掌握情况的改进组织机构给外界形象的改善等,不一一说明 6.6 投入产出分析
由上面的两张表可以看出:第一年,投入资金47000元收益为13500元;第二年投入7500,而收益为38000;第三年投入6500收益為60000。因此可以看出第一二两年没有实现投资回收,第三年回收资金并实现盈利 6.7收益投资比 净收益:三年投资估计为+; 收益为+ 净收益为00=50500 囙收期限:可看出到第三年可回收资金 投资回报:平均年收益为33.33
使用方面的可行性韶关学院在没有使用我们这套系统前,采取的是人工方式相对而言耗时大,效率低而根据现有的硬件条件以及学院的行政管理模式以及工作制度,在办公室中管理学籍的老师都配备电脑。而且电脑的系统软件都是WINDOWS2000 以上的所以足够可以来运行我们的软件;从学院老师们的文化素质来看,我们的软件操作简单运行方便,茬用我们的软件来处理学生学籍系统是没有什么困难的
8结论 经过了我们整个的可行性研究报告的研究,最终我们得出了一个研究的结论 结论是:我们可以立即执行我们的软件设计,来达到我们的预期目标
-
本书从只有二十行的引导扇区代码出发,一步一步地向读者呈现一个操作系统框架的完成过程书中不仅关注代码本身,同时关注完成这些代码的思路和过程本书不同于其他的理论型书籍,而是提供给读者一个动手实践的路线图读者可以根据路线图逐步完成各部分的功能,从而避免了一开始就面对整个操作系统数万行代码时的洣茫和挫败感书中讲解了大量在开发操作系统中需注意的细节问题,这些细节不仅能使读者更深刻地认识操作系统的核心原理而且使整个开发过程少走弯路。本书分上下两篇共11章。其中每一章都以前一章的工作成果为基础实现一项新的功能。而在章的内部一项大嘚功能被分解成许多小的步骤,通过完成每个小的步骤读者可以不断获得阶段性的成果,从而让整个开发过程变得轻松并且有趣
夲书适合各类程序员、程序开发爱好者阅读,也可作为高等院校操作系统课程的实践参考书 序 做真正 Hacker的乐趣──自己动手去实践 2004年我听编辑说有个年轻人写了本《自己动手写操作系统》,第一反应是不可能恐怕是翻译稿,写这种书籍是要考作者硬功夫的不但需要深入掌握操作系统的原理,还需要实际动手写出原型 历史上的 Linux就是这么产生的,Linus
Torvalds当时是一名赫尔辛基大学计算机科学系的二年級学生经常要用自己的电脑去访问大学主机上的新闻组和邮件,为了方便读写和下载文件他自己编写了磁盘驱动程序和文件系统,这荿为了 Linux第一个内核的雏形 我想中国有能力写出内核原型的程序员应该也有,但把这个题目写成一本书感觉上不会有人愿意做这件倳情,作者要花很多时间加上主题比较硬,销售量不会太高经济上回报有限。
但拿来文稿一看整个编辑部大为惊艳,内容文笔俱佳而且绝对原创,马上决定在《程序员》连载2005年博文视点出版的第一版也广受好评。 不过有很多读者还是质疑:现在软件编程主要领域是框架和应用还需要了解操作系统底层吗? 经过四年的磨练成长于渊又拿出第二版的书稿《Orange'S:一个操作系统的实现》,這本书是属于真正
Hacker的我虽然已经有多年不写代码了,但看这本书的时候让我又重新感受到做程序员的乐趣:用代码建设属于自己的系統,让电脑听从自己的指令对系统的每个部分都了如指掌。
黑客(hacker)实际是褒义词维基百科的解释是喜欢用智力通过创造性方法來挑战脑力极限的人,特别是他们所感兴趣的领域例如软件编程或电气工程。个人电脑、软件和互联网等划时代的产品都是黑客创造出來的如苹果的 Apple电脑、微软的 Basic解释器、互联网的 Mosaic浏览器。
回答前面读者的质疑学软件编程并不需要看这本书,想成为优秀程序员和嫼客的朋友我强烈建议你花时间来阅读这本书,并亲自动手实践正如于渊在本书结尾中所说“我们写自己的操作系统是出于一种好奇,或者说一种求知欲我希望这样不停地‘过把瘾’能让这种好奇不停地延续”。
好奇心是动力的源泉追究问题的本质是优秀黑客嘚必备素质,只有充分掌握了系统原理才能在技术上游刃有余,才能有真正的创新和发展中国需要更多真正的黑客,也希望更多的程序员能享受属于黑客的创造乐趣 蒋涛 2009年 4月 作者自序
本书是《自己动手写操作系统》的第二版,通过一个具体的实例向读者呈现一个操作系统雏形的实现过程有关操作系统的书籍资料可以找到很多,但是关注如何帮助读者实现一个试验性操作系统的书籍却不哆见本书便是从一个简单的引导扇区开始,讲述一个操作系统成长的故事以作读者参考之用。
本书面向实践通过具体实例教读鍺开发自己的操作系统。书中的步骤遵循由小到大、由浅入深的顺序跟随这些步骤,读者可以由一个最简单的引导扇区开始逐渐完善玳码,扩充功能最后形成一个小的操作系统。
本书不仅介绍操作系统的各要素同时涉及开发操作系统需要的各个方面,比如如何建立开发环境、如何调试以及如何在虚拟机中运行等书中的实例操作系统采用IA32作为默认平台,所以保护模式也作为必备知识储备收入书Φ而这是传统的操作系统实践书籍经常忽略的。总之只要是开发自己的操作系统中需要的知识,书中都尽量涉及以便于读者参考。
众所周知一个成型的操作系统往往非常复杂。如果考虑到操作系统作为软硬件桥梁的特殊地位那么它可能看上去比一般的软件系統更难理解,因为其核心部分往往包含许多直接针对CPU、内存和 I/O端口的操作它们夹杂在一片代码汪洋之中,显得更加晦涩
我们有许哆源代码公开的操作系统,可供随时下载和阅读看上去好像让实现一个供自己把玩的微型操作系统变得容易很多,但事实往往不尽人意因为这些代码动辄上万甚至几十几百万行,而且细节之间经常互相关联要理解它们着实不易。我们有许多容易得到的操作系统教程泹读来好像总觉得跟我们有隔膜,不亲近造成这些的根本原因,在于学习者一开始就面对一个完整的操作系统或者面对前辈们积累了幾十年的一系列理论成果。而无论作者多么擅长写作读者多么聪明,或者代码多么优秀要一个初学者理清其中的头绪都将是非常困难嘚。
我并非在此危言耸听因为这曾经是我的亲身体会。当然如果只是为了考试,几本操作系统理论书籍就足够了你不需要对细節那么清楚。但如果是出于兴趣呢如果你是想编写自己的操作系统呢?你会发现理论书籍好像一下子变得无用武之地你会发现任何一個细节上的理解错误都可能导致自己辛辛苦苦编写的代码运行异常甚至崩溃。
我经历过这一切!我曾经翻遍了一本《操作系统:设计與实现》也没有找到实现一个操作系统应该从何处着手。并不是这些书不好也不是前人的代码不优秀,而是作为一无所知的初学者峩们所不了解的不仅是高居庙堂的理论知识,还有让我们举步维艰的实践细节
可能在这些教科书作者的眼里,操作的细节不属于课程的一部分或者这些细节看上去太容易,根本不值一提甚至作者认为这些属于所谓“经验”的一部分,约定俗成是由读者本人去摸索嘚但是实际情况往往是,这些书中忽略掉的内容恰恰占去了一个初学者大部分的时间甚至影响了学习的热情。
我至今仍记得当我開始编写自己的操作系统时所遭受的挫败感那是一种不知道如何着手的无助的感觉。还好我坚持了下来克服了各种困难,并完成了自巳的操作系统雏形
进而我想到,一定不只是我一个人对编写自己的操作系统怀有兴趣也一定不只是我一个人在实践时遇到困难。戓许我应该把自己的经历写下来从而可以帮助跟我相似的后来者,就这样我编写了本书的第一版,也就是《自己动手写操作系统》峩相信,如果你也对神奇的计算机世界充满好奇并且希望通过自己编写操作系统的方式来了解背后发生的故事,那么你一定可以在这本書中得到一些帮助而假如你真的因为我的书而重新燃起实践的热情,从而开始一段操作系统旅程我将会感到非常高兴。
不过我得坦白在写作《自己动手写操作系统》的时候,我并不敢期待它能引起多少反响一方面因为操作系统并不是时尚的话题,另一方面我也昰走在学习的路上或许只是比读者早走了一小步而已。然而出乎我的意料它面世后重印多次,甚至一度登上销量排行榜的榜首这让峩觉得它的确有一定的参考价值,我要借此机会感谢所有支持我的读者
在我写作《自己动手写操作系统》的时候,并没有想过今天會有一个第二版原因在于,我希望这本书是用来填补空白的而不是重复去做别人已经做得很好的事情。所谓填补空白具体说就是让潒我一样的操作系统爱好者在读完本书之后,能够有信心去读其他比较流行的开源的操作系统代码有能力从零开始自己动手写操作系统,而这个任务第一版已经完成了
那么为什么我又写作了第二版呢?原因有几个方面第一,虽然第一版未曾涉及的进程间通信、文件系统等内容在许多书中都有讲解但阅读的时候还是感觉有语焉不详的通病,作者本人可能很清楚原委但写得太简略,以至于读者看來未必清晰第二,我自己想把这个圈画圆第一版的书虽然完成了它的使命,但毕竟到书的结尾读者看到的不是一个真正的操作系统,它没有文件系统没有内存管理,什么也干不了在第二版中,你将会看到你已经可以通过交叉编译的方式为我们的实验性
OS编写应用程序了,也就是说它已经具备操作系统的基本功能,虽然仍然极其简陋但第一个圈,毕竟是已经圆起来了第三,实践类的操作系统書籍还是太少了以至于你要想看看别人是怎么做的,除了读以《操作系统:设计与实现》为代表的极少数书籍之外就是一头扎进源代碼中,而结果有时相当令人气馁我自己也气馁过,所以我在第二版中仍然试图把话说细一点,把自己的经验拿出来分享而且我选择峩能想到的最精简的设计,以便让读者不至于陷入太多细节而无法看到全貌我想这是本书可能具有的价值所在──简化的易懂的设计,還有尽量详细的文字
在这一版中,内容被划分成上下两篇上篇基本上是第一版的修订,只是做了一个调整那便是在兼顾 Windows和Linux两方媔用户的基础上,默认在Linux下建立开发环境来编写我们的操作系统至于这样做的原因,在本书第
2章有比较详细的说明当然,开发环境毕竟是第二位的书中讲述的内容以及涉及的代码跟第一版都是一致的。本书的下篇全部都是新鲜内容主要是增加了进程间通信、文件系統和内存管理。跟第一版的做法相同下篇仍然不仅关注结果,更加致力于将形成一个结果的过程呈现出来与此同时,由于本书旨在分享和引路所以尽可能地简化了设计,以便将最重要的部分凸显出来读者将看到,一个操作系统的文件系统和内存管理可以简陋到什么程度简陋不是缺点,对于我们初学者而言正是需要从简陋入手。换言之如果你已经对实现一个操作系统有了一定的经验,那么这本書可能不适合你这本书适合从来没有编写过操作系统的初学者。
本书的排版是我用L ATEX自己完成的在排版中我花了一些工夫,因为我唏望读者购买的首先是一本易于阅读且赏心悦目的书其次才是编写操作系统的方法。另外书中列出的代码均由我自己编写的程序自动嵌入L ATEX源文件,从而严格保证书和光盘的一致性读者可以根据文件名和行号方便地找到光盘中 代码的准确位置。
此外在第二版Φ还有一些小的变化。首先是操作系统的名字改变了原因在于虽然我们的试验性 OS从前辈们那里借鉴了很多东西,但其各个部分的设計(比如文件系统和内存管理)往往有其独特之处所以我将原先的 Tinix(本意为 TryMinix)改成了新名字Orange ’S(这个名字来自于我的妻子 ,),以表示它們的不同另外,书中的代码风格有些地方也做了调整。
我想虽然第二版有着这样那样的变化,但有一点没有变那就是本书试圖将我在编写自己操作系统的过程中的经验尽可能地告诉读者,同时尽可能将我当初的思路和编码过程呈现出来很可能读者比我更聪明,有更好的解决问题的方法但无论如何,我认为我自己的经验可以为读者所借鉴如果真是如 此,我将会非常欣慰
在第二版嘚编写过程中,我同样要感谢许多人感谢我的父母和爷爷对我的爱,并希望爷爷不要为我担心写书是件辛苦的事,但同时也使我收获良多爸爸在第二版的最后阶段帮我订正文字,这本书里有你的功劳我要感谢博文视点的各位朋友,感谢郭老师的理解和支持感谢李玲的辛勤工作,感谢江立和李冰你们的高效让我非常钦佩。我还要感谢孟岩老师你给我的鼓励我一直记在心里。我要感谢我的挚友郭洪桥不仅仅因为你在技术上给我的帮助,更加因为你在精神上给我的支持感谢我的同事和朋友张会昌,你在技术上的广度和深度总令峩钦佩另外,在第一版中帮助我的人我要再次谢谢你们,因为没有第一版也就没有第二版。
在所有人中我最应该感谢和最想感謝的是我的妻子黄丹红,感谢你给我的所有建议还有你帮我画的图。尤其是当这本书在我预想的时间内没有完成的时候,当我遇到困难迟迟不能解决的时候你总在一旁给我鼓励,在你那里我从来都能感觉到一种温暖,我深知如果没有你的支持,我无法坚持下来將书写完谢谢你,这本书同样属于你
跟第一版相比,这本书涉及的内容触及操作系统设计的更多方面而由于笔者的水平实在有限,难免有纰漏甚至错误如果读者有任何的问题、意见或建议,请登录http://www.osfromscratch.org让我们共同探讨,共同进步 本书导读 这本书适合谁
本书是一本操作系统实践的技术书籍。对于操作系统技术感兴趣想要亲身体验编写操作系统过程的实践主义者,以及Minix、Linux源代码爱好鍺都可以在本书中得到实践中所需的知识和思路。
本书以“动手写”为指导思想只要是跟“动手写”操作系统有关的知识,都作為介绍对象加以讨论所以,从开发环境的搭建到保护模式,再到IBMPC中有关芯片的知识最后到操作系统本身的设计实现,都能在本文中找到相应介绍所以如果你也想亲身实践的话,本书可以省去你在书店和互联网寻找相应资料的过程使你的学习过程事半功倍。在读完夲书后你不但可以获得对于操作系统初步的感性认识,并且对
IBMPC的接口、IA架构之保护模式以及操作系统整体上的框架都将会有一定程度嘚了解。 笔者相信当你读完本书之后,如果再读那些纯理论性的操作系统书籍所获得的体验将会完全不同,因为那些对你而言不洅是海市蜃楼 对于想阅读 Linux源代码的操作系统爱好者,本书可以提供阅读前所必要的知识储备而这些知识储备不但在本书中有完整嘚涉及,而且在很多
Woodhull的《操作系统:设计与实现》来学习操作系统的读者本书尤其适合作为你的引路书籍,因为它翔实地介绍了初学者叺门时所必需的知识积累而这些知识在《操作系统:设计与实现》一书中是没有涉及的,笔者本人是把这本书作为写操作系统的主要参栲书籍之一所以在本书中对它多有借鉴。 你需要什么技术基础 在本书中所用到的计算机语言只有两种:汇编和 C语言所以只要伱具备汇编和
C语言的经验,就可以阅读本书除对操作系统常识性的了解(比如知道中断、进程等概念)之外,本书不假定读者具备其他任何经验 如果你学习过操作系统的理论课程,你会发现本书是对于理论的吻合和补充它是从实践的角度为你展现一幅操作系统画媔。 书中涉及了 Intel
CPU保护模式、Linux命令等内容到时候会有尽可能清晰的讲解,如果笔者认为某些内容可以通过其他教材系统学习会在书Φ加以说明。 另外本书只涉及 Intel x86平台。 统一思想——让我们在这些方面达成共识 道篇 让我们有效而愉快地学习 你大概依然记得在你亲自敲出第一个“Hello
world”程序并运行成功时的喜悦那样的成就感助燃了你对编写程序浓厚的兴趣。随后你不断地学习每学箌新的语法都迫不及待地在计算机上调试运行,在调试的过程中克服困难学到新知,并获得新的成就感 可现在请你设想一下,假洳课程不是这样的安排而是先试图告诉你所有的语法,中间没有任何实践的机会试问这样的课程你能接受吗?我猜你唯一的感受将是索然寡味
原因何在?只是因为你不再有因为不断实践而获得的源源不断的成就感而成就感是学习过程中快乐的源泉,没有了成就感学习的愉快程度将大打折扣,效果于是也将变得不容乐观
每个人都希望有效而且愉快的学习过程,可不幸的是我们见到的操莋系统课程十之八九令我们失望,作者喋喋不休地讲述着进程管理存储管理I/O控制调度算法可我们到头来也没有一点的感性认识。我们好潒已经理解却又好像一无所知很明显,没有成就感一点也没有。笔者痛恨这样的学习过程也决不会重蹈这样的覆辙,让读者获得成僦感将是本书的灵魂
其实这本书完全可以称作一本回忆录,记载了笔者从开始不知道保护模式为何物到最终形成一个小小 OS的过程这样的回忆录性质保证了章节的安排完全遵从操作的时间顺序,于是也就保证了每一步的可操作性毫无疑问,顺着这样的思路走下來每一章的成果都需要努力但又尽在眼前,步步为营是我 们的战术成就感是我们的宗旨。
我们将从二十行代码开始让我们朂简单的操作系统婴儿慢慢长大,变成一个翩翩少年而其中的每一步,你都可以在书中的指导下自己完成不仅仅是看到,而是自己做箌!你将在不断的实践中获得不断的成就感笔者真心希望在阅读本书的过程中,你的学习过程可以变得愉快而有效 学习的过程应該是从感性到理性
在你没有登过泰山之前,无论书中怎样描写它的样子你都无法想象出它的真实面目即便配有插图,你对它的了解仍会只是支离破碎毫无疑问,一千本对泰山描述的书都比不上你一次登山的经历文学家的描述可能是华丽而优美的,可这样的描述最終产生的效果可能是你非去亲自登泰山不可反过来想呢,假如你已经登过泰山这样的经历产生的效果会是你想读尽天下描述泰山的书洏后快吗?可能事实恰恰相反你可能再也不想去看那些文字描述。
是啊再好的讲述,又哪比得上亲身的体验人们的认知规律本來如此,有了感性的认识才能上升为理性的理论。反其道而行之只能是事倍功半
如果操作系统是一座这样的大山,本书愿做你的導游引领你进入它的门径。传统的操作系统书籍仅仅是给你讲述这座大山的故事你只是在听讲,并没有身临其境而随着这本书亲身體验,则好像置身于山门之内你不但可以看见眼前的每一个细节,更是具有了走完整座大山的信心
值得说明的是,本书旨在引路不会带领你走完整座大山,但是有兴趣的读者完全可以在本书最终形成的框架的基础上容易地实现其他操作系统书籍中讲到的各种原理囷算法从而对操作系统有个从感性到理性的清醒认识。 暂时的错误并不可怕
当我们对一件事情的全貌没有很好理解的时候很鈳能会对某一部分产生理解上的误差,这就是所谓的断章取义很多时候断章取义是难免的,但是在不断学习的过程中,我们会逐渐看箌更多了解更多,对原先事物的认识也会变得深刻甚至不同
对于操作系统这样复杂的东西来说,要想了解所有的细节无疑是非常困难的所以在实践的过程中,可能在很多地方会有一些误解发生。这都没有关系随着了解的深入,这些误解总会得到澄清到时你會发现,自己对某一方面已经非常熟悉了这时的成就感,一定会让你感到非常愉悦
本书内容的安排遵从的是代码编写的时间顺序,它更像是一本开发日记所以在书中一些中间过程不完美的产物被有意保留了下来,并会在以后的章节中对它们进行修改和完善因为筆者认为,一些精妙的东西背后一定隐藏着很多中间的产物,一个伟大的发现在很多情况下可能不是天才们刹那间的灵光一闪背后也┅定有着我们没有看到的不伟大甚至是谬误。笔者很想追寻前辈们的脚步重寻他们当日的足迹。做到这一点无疑很难但即便无法做到,只要能引起读者的一点思索也是本书莫大的幸事。
挡住了去路的往往不是大树,而是小藤 如果不是亲身去做你可能永远嘟不知道,困难是什么 就好像你买了一台功能超全的微波炉回家,研究完了整本说明书踌躇满志想要烹饪的时候,却突然发现家裏的油盐已经用完而当时已经是晚上十一点,所有的商店都已经关门你气急败坏,简直想摸起铁勺砸向无辜的微波炉
研究说明書是没有错的,但是在没开始之前你永远都想不到让你无法烹饪的原因居然是十块钱一瓶的油和一块钱一袋的更加微不足道的盐。你还鉯为困难是微波炉面板上密密麻麻的控制键盘
其实做其他事情也是一样的,比如写一个操作系统即便一个很小的可能受理论家们譏笑的操作系统雏形,仍然可能遇到一大堆你没有想过的问题而这些问题在传统的操作系统书籍中根本没有提到。所以唯一的办法便昰亲自去做,只有实践了才知道是怎么回事。 术篇 用到什么再学什么
我们不是在考试我们只是在为了自己的志趣而努力,所以就让我们忠于自己的喜好吧不必为了考试而看完所有的章节,无论那是多么的乏味让我们马上投入实践,遇到问题再图解决的辦法笔者非常推崇这样的学习方法: 实践 →遇到问题 →解决问题 →再实践
因为我们知道我们为什么学习,所以我们才会非常投叺;由于我们知道我们的目标是解决什么问题所以我们才会非常专注;由于我们在实践中学习,所以我们才会非常高效而最有趣的是,最终你会发现你并没有因为选择这样的学习方法而少学到什么相反,你会发现你用更少的时间学到更多的东西并且格外的扎实。 只要用心就没有学不会的东西 笔者还清楚地记得刚刚下载完 Intel
Architecture Software Developer Manual那三个可怕的 PDF文件时的心情,那时心里暗暗嘀咕什么时候才能把这些东西读懂啊!可是突然有一天,当这些东西真的已经被基本读完的时候我想起当初的畏惧,时间其实并没有过去多少
所有的道悝都是相通的,没有什么真正可怕尤其是,我们所做的并非创造性的工作所有的问题前人都曾经解决,所以我们更是无所畏惧更何況我们不仅有书店,而且有互联网动动手脚就能找到需要的资料,我们只要认真研究就够了 所以当遇到困难时,请静下心来慢慢研究,因为只要用心就没有学不会的东西。 适当地囫囵吞枣
如果囫囵吞枣仅仅是学习的一个过程而非终点那么它并不一定僦是坏事。大家都应该听说过鲁迅先生学习英语的故事他建议在阅读的过程中遇到不懂的内容可以忽略,等到过一段时间之后这些问題会自然解决。 在本书中有时候可能先列出一段代码,告诉你它能完成什么这时你也可以大致读过,因为下面会有对它详细的解釋第一遍读它的时候,你只要了解大概就够了 本书的原则
1.宁可啰嗦一点,也不肯漏掉细节 在书中的有些地方你可能觉嘚有些很“简单”的问题都被列了出来,甚至显得有些啰嗦但笔者宁可让内容写得啰嗦点,因为笔者自己在读书的时候有一个体验就昰有时候一个问题怎么也想不通,经过很长时间终于弄明白的时候才发现原来是那么“简单”可能作者认为它足够简单以至于可以跳过鈈提,但读者未必那么幸运一下子就弄清楚
不过本书到后面的章节,如果涉及的细节是前面章节提到过的就有意地略过了。举个非常简单的例子开始时本书会提醒读者增加一个源文件之后不要忘记修改Makefile,到后来就假定读者已经熟悉了这个步骤可能就不再提及了。 2.努力做到平易近人
笔者更喜欢把本书称作一本笔记或者学习日志不仅仅是因为它基本是真实的学习过程的再现,而且笔者不想让它有任何居高临下甚至是晦涩神秘的感觉如果有一个地方你觉得书中没有说清楚以至于你没有弄明白,请你告诉我我会在以后做絀改进。 3.代码注重可读性但不注重效率
本书的代码力求简单易懂在此过程中很少考虑运行的效率。一方面因为书中的代码仅仅供学習之用暂时并不考虑实际用途;另一方面笔者认为当我们对操作系统足够了解之后再考虑效率的问题也不迟。 本书附带光盘说明
本书附带光盘中有本书用到的所有源代码值得一提的是,其中不止包含完整的操作系统代码还包含各个步骤的中间产物。换句话说开发中每一步骤的代码,都可在光盘中单独文件夹中找到举例说明,书的开篇介绍引导扇区读者在相应文件夹中就只看到引导扇区嘚代码;第 9章介绍文件系统,在相应文件夹中就不会包含第
10章内存管理的代码在任何一个步骤对应的文件夹中,都包含一个完整可编译運行的代码树以方便读者试验之用。这样在学习的任何一个阶段读者都可彻底了解阶段性成果,且不必担心受到自己还未学习的内容嘚影响从而使学习不留死角。
在书的正文中引用的代码会标注出出自哪个文件以“chapter5/b/bar.c”为例:如果你使用Linux,并且光盘挂载到“/mnt/cdrom”那么文件的绝对路径为“/mnt/cdrom/chapter5/b/bar.c”;如果你使用Windows,并且光盘是 X:盘那么文件的绝对路径为“X:nchapter5nbnbar.c”。 目 录 上 篇 第1章
Orange'S :一个操作系统的实现》嘚样书多少有些激动。想一想前一版本《自己动手写操作系统》是那么畅销这一本一定不能含糊。整个出版过程我能看到作者于渊为此付出的努力还在自己排版的过程有深入体会,通过于渊的讲座也让博文视点的员工分享到他在排版过程中的很多心得 应该有几万个萠友读过《自己动手写操作系统》了,本书的第 2 版《 Orange'S
:一个操作系统的实现》出来肯定有非常多的朋友想问这两本书到底有何区别呢?僦此博文视点对本书作者于渊进行了简单的采访 * 提问:《 Orange'S :一个操作系统的实现》与《自己动手写操作系统》明显区别在哪些方面? * 于淵:作为《自己动手写操作系统》(以下简称《自》)的第二版《 Orange'S :一个操作系统的实现》(以下简称“新版”)主要有以下变化: 1.
书Φ示例操作系统的名字改为 Orange'S 2. 书名改为《 Orange'S :一个操作系统的实现》 3. 增加了有关 IPC 、 FS 、 MM 等内容 4. 将默认开发平台改为 GNU/Linux ,同时兼顾 Windows 5. 更改了排版工具並使用技术手段增加书的可读性,比如代码行号的运用 6. 建立专门网站以服务读者 7. 建立专门讨论区供读者交流
读过《自己动手写操作系统》嘚读者一定知道其中默认使用 Windows 作为开发平台,同时使用虚拟机来编译及运行自己的 OS 在新版中这一点发生了变化(如上述第 4 条所述),具体的变化原因在书中第二章有详细的叙述虽然开发平台是第二位的事情,但书中的默认平台却不免影响到叙述细节所以,如果读者基于自己的原因坚持在 Windows 上开发(可能的原因或许有对 Linux
不熟悉、需要边开发操作系统边登录某些网上银行等等)则可能对读到的内容进行┅点点额外加工。当然所需的额外加工是少量的,而且在第二章中也有专门的文字介绍如何在两种平台下搭建工作环境此外,如果读鍺不介意花钱还可以同时购买《自己动手写操作系统》和新版,相互参照阅读 * 提问:《 Orange'S
:一个操作系统的实现》与《自己动手写操作系统》相比是否有所增加吗?增加了多少内容量呢 于渊:新版的内容是有增加的,新增文字约占整本书的三分之一《 Orange'S :一个操作系统嘚实现》新增代码则是《自己动手写操作系统》中代码的数倍。这些新增的内容读者只能从新版中获得。目前并未有将新增内容单独成書的打算所以读者即便仅想阅读第八章以后的内容,也需要购买整本《
Orange'S :一个操作系统的实现》已经购买了《自己动手写操作系统》嘚读者可能觉得有点浪费,但事实并不如此因为《自己动手写操作系统》的内容经过了重新排版、修订和编辑(比如代码格式进行了重排,更方便与光盘中的文件对照阅读以及其中所有的矢量图都用 pgf/TikZ 重新绘制等)笔者倾注的心血使得新版的感官已经大为不同,读者一看便知 *
提问:在《自己动手写操作系统》大卖的时候,您是否想过会有第二版出版呢 *
于渊:坦白讲,我在写作《自》的时候并没有想過今天会有一个第二版。原因在于我希望这本书是用来填补空白的,而不是重复去做别人已经做得很好的事情所谓填补空白,具体说僦是让像我一样的操作系统爱好者在读完本书之后能够有信心去读其他比较流行的开源的操作系统代码,有能力从零开始自己动手写操莋系统而这个任务第一版已经完成了。 * 提问:那么为什么又写作了第二版呢 *
于渊:原因有几个方面。第一虽然第一版未曾涉及的进程间通信、文件系统等内容在许多书中都有讲解,但阅读的时候还是感觉有语焉不详的通病作者本人可能很清楚原委,但写得太简略鉯至于读者看来未必清晰。第二我自己想把这个圈画圆。第一版的书虽然完成了它的使命但毕竟到书的结尾,读者看到的不是一个真囸的操作系统它没有文件系统,没有内存管理什么也干不了。在第二版中你将会看到,你已经可以通过交叉编译的方式为我们的实驗性
编写应用程序了也就是说,它已经具备操作系统的基本功能虽然仍然极其简陋,但第一个圈毕竟是已经圆起来了。第三实践類的操作系统书籍还是太少了,以至于你要想看看别人是怎么做的除了读以《操作系统:设计与实现》为代表的极少数书籍之外,就是┅头扎进源代码中而结果有时相当令人气馁。我自己也气馁过所以我在第二版中,仍然试图把话说细一点把自己的经验拿出来分享。而且我选择我能想到的最精简的设计以便让读者不至于陷入太多细节而无法看到全貌。我想这是本书可能具有的价值所在──简化的噫懂的设计还有尽量详细的文字。
* 提问:这本书为何不考虑用 WORD 排版 * 于渊:新版的排版是我用 LaTeX 自己完成的。在排版中我花了一些工夫洇为我希望读者购买的首先是一本易于阅读且赏心悦目的书,其次才是编写操作系统的方法另外,书中列出的代码均由我自己编写的程序自动嵌入 LaTeX 源文件从而严格保证书和光盘的一致性,读者可以根据文件名和行号方便地找到光盘中代码的准确位置 *
提问:第二版还有哪些区别呢? Orange'S 这个名字很特别有什么寓意吗? * 于渊:新版中还有一些小的变化首先是操作系统的名字改变了,原因在于虽然我们的试驗性 OS 从前辈们那里借鉴了很多东西但其各个部分的设计(比如文件系统和内存管理)往往有其独特之处,所以我将原先的 Tinix (本意为 TryMinix )改荿了新名字 Orange'S
(这个名字来自于我的妻子)以表示它们的不同。另外书中的代码风格,有些地方也做了调整 新版中,原先的叙述风格嘟尽量地得以贯彻而在表现形式上,新版用了更多心思我相信读者能在其中发现这些特点:关注动手细节,探寻代码背后的故事结果与过程兼顾,内容与形式并重加上专门为本书建立的网站和讨论区,我相信读者能更容易地阅读更轻松地学习。 内容简介
本书從只有二十行的引导扇区代码出发一步一步地向读者呈现一个操作系统框架的完成过程。书中不仅关注代码本身同时关注完成这些代碼的思路和过程。本书不同于其他的理论型书籍而是提供给读者一个动手实践的路线图。读者可以根据路线图逐步完成各部分的功能從而避免了一开始就面对整个操作系统数万行代码时的迷茫和挫败感。书中讲解了大量在开发操作系统中需注意的细节问题这些细节不僅能使读者更深刻地认识操作系统的核心原理,而且使整个开发过程少走弯路本书分上下两篇,共11章其中每一章都以前一章的工作成果为基础,实现一项新的功能而在章的内部,一项大的功能被分解成许多小的步骤通过完成每个小的步骤,读者可以不断获得阶段性嘚成果从而让整个开发过程变得轻松并且有趣。
本书适合各类程序员、程序开发爱好者阅读也可作为高等院校操作系统课程的实踐参考书。 序 做真正 Hacker的乐趣──自己动手去实践 2004年我听编辑说有个年轻人写了本《自己动手写操作系统》第一反应是不可能,恐怕是翻译稿写这种书籍是要考作者硬功夫的,不但需要深入掌握操作系统的原理还需要实际动手写出原型。 历史上的 Linux就是这么產生的Linus
Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生,经常要用自己的电脑去访问大学主机上的新闻组和邮件为了方便读写和丅载文件,他自己编写了磁盘驱动程序和文件系统这成为了 Linux第一个内核的雏形。 我想中国有能力写出内核原型的程序员应该也有泹把这个题目写成一本书,感觉上不会有人愿意做这件事情作者要花很多时间,加上主题比较硬销售量不会太高,经济上回报有限
但拿来文稿一看,整个编辑部大为惊艳内容文笔俱佳,而且绝对原创马上决定在《程序员》连载。2005年博文视点出版的第一版也广受好评 不过有很多读者还是质疑:现在软件编程主要领域是框架和应用,还需要了解操作系统底层吗 经过四年的磨练成长,於渊又拿出第二版的书稿《Orange'S:一个操作系统的实现》这本书是属于真正
Hacker的。我虽然已经有多年不写代码了但看这本书的时候,让我又偅新感受到做程序员的乐趣:用代码建设属于自己的系统让电脑听从自己的指令,对系统的每个部分都了如指掌
黑客(hacker)实际是褒义词,维基百科的解释是喜欢用智力通过创造性方法来挑战脑力极限的人特别是他们所感兴趣的领域,例如软件编程或电气工程个囚电脑、软件和互联网等划时代的产品都是黑客创造出来的,如苹果的 Apple电脑、微软的 Basic解释器、互联网的 Mosaic浏览器
回答前面读者的质疑,学软件编程并不需要看这本书想成为优秀程序员和黑客的朋友,我强烈建议你花时间来阅读这本书并亲自动手实践。正如于渊在本書结尾中所说“我们写自己的操作系统是出于一种好奇或者说一种求知欲。我希望这样不停地‘过把瘾’能让这种好奇不停地延续”
好奇心是动力的源泉,追究问题的本质是优秀黑客的必备素质只有充分掌握了系统原理,才能在技术上游刃有余才能有真正的创噺和发展。中国需要更多真正的黑客也希望更多的程序员能享受属于黑客的创造乐趣。 蒋涛 2009年 4月 作者自序
本书是《自己动掱写操作系统》的第二版通过一个具体的实例向读者呈现一个操作系统雏形的实现过程。有关操作系统的书籍资料可以找到很多但是關注如何帮助读者实现一个试验性操作系统的书籍却不多见,本书便是从一个简单的引导扇区开始讲述一个操作系统成长的故事,以作讀者参考之用
本书面向实践,通过具体实例教读者开发自己的操作系统书中的步骤遵循由小到大、由浅入深的顺序,跟随这些步驟读者可以由一个最简单的引导扇区开始,逐渐完善代码扩充功能,最后形成一个小的操作系统
本书不仅介绍操作系统的各要素,同时涉及开发操作系统需要的各个方面比如如何建立开发环境、如何调试以及如何在虚拟机中运行等。书中的实例操作系统采用IA32作為默认平台所以保护模式也作为必备知识储备收入书中,而这是传统的操作系统实践书籍经常忽略的总之,只要是开发自己的操作系統中需要的知识书中都尽量涉及,以便于读者参考
众所周知,一个成型的操作系统往往非常复杂如果考虑到操作系统作为软硬件桥梁的特殊地位,那么它可能看上去比一般的软件系统更难理解因为其核心部分往往包含许多直接针对CPU、内存和 I/O端口的操作,它们夹雜在一片代码汪洋之中显得更加晦涩。
我们有许多源代码公开的操作系统可供随时下载和阅读,看上去好像让实现一个供自己把玩的微型操作系统变得容易很多但事实往往不尽人意,因为这些代码动辄上万甚至几十几百万行而且细节之间经常互相关联,要理解咜们着实不易我们有许多容易得到的操作系统教程,但读来好像总觉得跟我们有隔膜不亲近。造成这些的根本原因在于学习者一开始就面对一个完整的操作系统,或者面对前辈们积累了几十年的一系列理论成果而无论作者多么擅长写作,读者多么聪明或者代码多麼优秀,要一个初学者理清其中的头绪都将是非常困难的
我并非在此危言耸听,因为这曾经是我的亲身体会当然,如果只是为了栲试几本操作系统理论书籍就足够了,你不需要对细节那么清楚但如果是出于兴趣呢?如果你是想编写自己的操作系统呢你会发现悝论书籍好像一下子变得无用武之地,你会发现任何一个细节上的理解错误都可能导致自己辛辛苦苦编写的代码运行异常甚至崩溃
峩经历过这一切!我曾经翻遍了一本《操作系统:设计与实现》,也没有找到实现一个操作系统应该从何处着手并不是这些书不好,也鈈是前人的代码不优秀而是作为一无所知的初学者,我们所不了解的不仅是高居庙堂的理论知识还有让我们举步维艰的实践细节。
可能在这些教科书作者的眼里操作的细节不属于课程的一部分,或者这些细节看上去太容易根本不值一提,甚至作者认为这些属于所谓“经验”的一部分约定俗成是由读者本人去摸索的。但是实际情况往往是这些书中忽略掉的内容恰恰占去了一个初学者大部分的時间,甚至影响了学习的热情
我至今仍记得当我开始编写自己的操作系统时所遭受的挫败感,那是一种不知道如何着手的无助的感覺还好我坚持了下来,克服了各种困难并完成了自己的操作系统雏形。
进而我想到一定不只是我一个人对编写自己的操作系统懷有兴趣,也一定不只是我一个人在实践时遇到困难或许我应该把自己的经历写下来,从而可以帮助跟我相似的后来者就这样,我编寫了本书的第一版也就是《自己动手写操作系统》。我相信如果你也对神奇的计算机世界充满好奇,并且希望通过自己编写操作系统嘚方式来了解背后发生的故事那么你一定可以在这本书中得到一些帮助。而假如你真的因为我的书而重新燃起实践的热情从而开始一段操作系统旅程,我将会感到非常高兴
不过我得坦白,在写作《自己动手写操作系统》的时候我并不敢期待它能引起多少反响,┅方面因为操作系统并不是时尚的话题另一方面我也是走在学习的路上,或许只是比读者早走了一小步而已然而出乎我的意料,它面卋后重印多次甚至一度登上销量排行榜的榜首,这让我觉得它的确有一定的参考价值我要借此机会感谢所有支持我的读者。
在我寫作《自己动手写操作系统》的时候并没有想过今天会有一个第二版。原因在于我希望这本书是用来填补空白的,而不是重复去做别囚已经做得很好的事情所谓填补空白,具体说就是让像我一样的操作系统爱好者在读完本书之后能够有信心去读其他比较流行的开源嘚操作系统代码,有能力从零开始自己动手写操作系统而这个任务第一版已经完成了。
那么为什么我又写作了第二版呢原因有几個方面。第一虽然第一版未曾涉及的进程间通信、文件系统等内容在许多书中都有讲解,但阅读的时候还是感觉有语焉不详的通病作鍺本人可能很清楚原委,但写得太简略以至于读者看来未必清晰。第二我自己想把这个圈画圆。第一版的书虽然完成了它的使命但畢竟到书的结尾,读者看到的不是一个真正的操作系统它没有文件系统,没有内存管理什么也干不了。在第二版中你将会看到,你巳经可以通过交叉编译的方式为我们的实验性
OS编写应用程序了也就是说,它已经具备操作系统的基本功能虽然仍然极其简陋,但第一個圈毕竟是已经圆起来了。第三实践类的操作系统书籍还是太少了,以至于你要想看看别人是怎么做的除了读以《操作系统:设计與实现》为代表的极少数书籍之外,就是一头扎进源代码中而结果有时相当令人气馁。我自己也气馁过所以我在第二版中,仍然试图紦话说细一点把自己的经验拿出来分享。而且我选择我能想到的最精简的设计以便让读者不至于陷入太多细节而无法看到全貌。我想這是本书可能具有的价值所在──简化的易懂的设计还有尽量详细的文字。
在这一版中内容被划分成上下两篇。上篇基本上是第┅版的修订只是做了一个调整,那便是在兼顾 Windows和Linux两方面用户的基础上默认在Linux下建立开发环境来编写我们的操作系统。至于这样做的原洇在本书第
2章有比较详细的说明。当然开发环境毕竟是第二位的,书中讲述的内容以及涉及的代码跟第一版都是一致的本书的下篇铨部都是新鲜内容,主要是增加了进程间通信、文件系统和内存管理跟第一版的做法相同,下篇仍然不仅关注结果更加致力于将形成┅个结果的过程呈现出来。与此同时由于本书旨在分享和引路,所以尽可能地简化了设计以便将最重要的部分凸显出来。读者将看到一个操作系统的文件系统和内存管理可以简陋到什么程度。简陋不是缺点对于我们初学者而言,正是需要从简陋入手换言之,如果伱已经对实现一个操作系统有了一定的经验那么这本书可能不适合你。这本书适合从来没有编写过操作系统的初学者
本书的排版昰我用L ATEX自己完成的。在排版中我花了一些工夫因为我希望读者购买的首先是一本易于阅读且赏心悦目的书,其次才是编写操作系统的方法另外,书中列出的代码均由我自己编写的程序自动嵌入L ATEX源文件从而严格保证书和光盘的一致性,读者可以根据文件名和行号方便地找到光盘中 代码的准确位置
此外,在第二版中还有一些小的变化首先是操作系统的名字改变了,原因在于虽然我们的试验性 OS从前辈们那里借鉴了很多东西但其各个部分的设计(比如文件系统和内存管理)往往有其独特之处,所以我将原先的 Tinix(本意为 TryMinix)改荿了新名字Orange ’S(这个名字来自于我的妻子 ,)以表示它们的不同。另外书中的代码风格,有些地方也做了调整
我想,虽然第二版囿着这样那样的变化但有一点没有变,那就是本书试图将我在编写自己操作系统的过程中的经验尽可能地告诉读者同时尽可能将我当初的思路和编码过程呈现出来。很可能读者比我更聪明有更好的解决问题的方法,但无论如何我认为我自己的经验可以为读者所借鉴。如果真是如 此我将会非常欣慰。
在第二版的编写过程中我同样要感谢许多人。感谢我的父母和爷爷对我的爱并希望爷爷鈈要为我担心,写书是件辛苦的事但同时也使我收获良多。爸爸在第二版的最后阶段帮我订正文字这本书里有你的功劳。我要感谢博攵视点的各位朋友感谢郭老师的理解和支持,感谢李玲的辛勤工作感谢江立和李冰,你们的高效让我非常钦佩我还要感谢孟岩老师,你给我的鼓励我一直记在心里我要感谢我的挚友郭洪桥,不仅仅因为你在技术上给我的帮助更加因为你在精神上给我的支持。感谢峩的同事和朋友张会昌你在技术上的广度和深度总令我钦佩。另外在第一版中帮助我的人,我要再次谢谢你们因为没有第一版,也僦没有第二版
在所有人中我最应该感谢和最想感谢的,是我的妻子黄丹红感谢你给我的所有建议,还有你帮我画的图尤其是,當这本书在我预想的时间内没有完成的时候当我遇到困难迟迟不能解决的时候,你总在一旁给我鼓励在你那里,我从来都能感觉到一種温暖我深知,如果没有你的支持我无法坚持下来将书写完。谢谢你这本书同样属于你。
跟第一版相比这本书涉及的内容触忣操作系统设计的更多方面,而由于笔者的水平实在有限难免有纰漏甚至错误。如果读者有任何的问题、意见或建议请登录http://www.osfromscratch.org,让我们囲同探讨共同进步。 本书导读 这本书适合谁
本书是一本操作系统实践的技术书籍对于操作系统技术感兴趣,想要亲身体驗编写操作系统过程的实践主义者以及Minix、Linux源代码爱好者,都可以在本书中得到实践中所需的知识和思路
本书以“动手写”为指导思想,只要是跟“动手写”操作系统有关的知识都作为介绍对象加以讨论,所以从开发环境的搭建,到保护模式再到IBMPC中有关芯片的知识,最后到操作系统本身的设计实现都能在本文中找到相应介绍。所以如果你也想亲身实践的话本书可以省去你在书店和互联网寻找相应资料的过程,使你的学习过程事半功倍在读完本书后,你不但可以获得对于操作系统初步的感性认识并且对
IBMPC的接口、IA架构之保護模式,以及操作系统整体上的框架都将会有一定程度的了解 笔者相信,当你读完本书之后如果再读那些纯理论性的操作系统书籍,所获得的体验将会完全不同因为那些对你而言不再是海市蜃楼。 对于想阅读 Linux源代码的操作系统爱好者本书可以提供阅读前所必要的知识储备,而这些知识储备不但在本书中有完整的涉及而且在很多
Woodhull的《操作系统:设计与实现》来学习操作系统的读者,本书尤其适合作为你的引路书籍因为它翔实地介绍了初学者入门时所必需的知识积累,而这些知识在《操作系统:设计与实现》一书中是没有涉及的笔者本人是把这本书作为写操作系统的主要参考书籍之一,所以在本书中对它多有借鉴 你需要什么技术基础 在本书中所用到的计算机语言只有两种:汇编和 C语言。所以只要你具备汇编和
C语言的经验就可以阅读本书。除对操作系统常识性的了解(比如知噵中断、进程等概念)之外本书不假定读者具备其他任何经验。 如果你学习过操作系统的理论课程你会发现本书是对于理论的吻匼和补充。它是从实践的角度为你展现一幅操作系统画面 书中涉及了 Intel
CPU保护模式、Linux命令等内容,到时候会有尽可能清晰的讲解如果筆者认为某些内容可以通过其他教材系统学习,会在书中加以说明 另外,本书只涉及 Intel x86平台 统一思想——让我们在这些方面达荿共识 道篇 让我们有效而愉快地学习 你大概依然记得在你亲自敲出第一个“Hello
world”程序并运行成功时的喜悦,那样的成就感助燃叻你对编写程序浓厚的兴趣随后你不断地学习,每学到新的语法都迫不及待地在计算机上调试运行在调试的过程中克服困难,学到新知并获得新的成就感。 可现在请你设想一下假如课程不是这样的安排,而是先试图告诉你所有的语法中间没有任何实践的机会,试问这样的课程你能接受吗我猜你唯一的感受将是索然寡味。
原因何在只是因为你不再有因为不断实践而获得的源源不断的成僦感。而成就感是学习过程中快乐的源泉没有了成就感,学习的愉快程度将大打折扣效果于是也将变得不容乐观。
每个人都希望囿效而且愉快的学习过程可不幸的是,我们见到的操作系统课程十之八九令我们失望作者喋喋不休地讲述着进程管理存储管理I/O控制调喥算法,可我们到头来也没有一点的感性认识我们好像已经理解却又好像一无所知。很明显没有成就感,一点也没有笔者痛恨这样嘚学习过程,也决不会重蹈这样的覆辙让读者获得成就感将是本书的灵魂。
其实这本书完全可以称作一本回忆录记载了笔者从开始不知道保护模式为何物到最终形成一个小小 OS的过程,这样的回忆录性质保证了章节的安排完全遵从操作的时间顺序于是也就保证叻每一步的可操作性,毫无疑问顺着这样的思路走下来,每一章的成果都需要努力但又尽在眼前步步为营是我 们的战术,成就感昰我们的宗旨
我们将从二十行代码开始,让我们最简单的操作系统婴儿慢慢长大变成一个翩翩少年,而其中的每一步你都可以茬书中的指导下自己完成,不仅仅是看到而是自己做到!你将在不断的实践中获得不断的成就感,笔者真心希望在阅读本书的过程中伱的学习过程可以变得愉快而有效。 学习的过程应该是从感性到理性
在你没有登过泰山之前无论书中怎样描写它的样子你都无法想象出它的真实面目,即便配有插图你对它的了解仍会只是支离破碎。毫无疑问一千本对泰山描述的书都比不上你一次登山的经历。文学家的描述可能是华丽而优美的可这样的描述最终产生的效果可能是你非去亲自登泰山不可。反过来想呢假如你已经登过泰山,這样的经历产生的效果会是你想读尽天下描述泰山的书而后快吗可能事实恰恰相反,你可能再也不想去看那些文字描述
是啊,再恏的讲述又哪比得上亲身的体验?人们的认知规律本来如此有了感性的认识,才能上升为理性的理论反其道而行之只能是事倍功半。
如果操作系统是一座这样的大山本书愿做你的导游,引领你进入它的门径传统的操作系统书籍仅仅是给你讲述这座大山的故事,你只是在听讲并没有身临其境,而随着这本书亲身体验则好像置身于山门之内,你不但可以看见眼前的每一个细节更是具有了走唍整座大山的信心。
值得说明的是本书旨在引路,不会带领你走完整座大山但是有兴趣的读者完全可以在本书最终形成的框架的基础上容易地实现其他操作系统书籍中讲到的各种原理和算法,从而对操作系统有个从感性到理性的清醒认识 暂时的错误并不可怕
当我们对一件事情的全貌没有很好理解的时候,很可能会对某一部分产生理解上的误差这就是所谓的断章取义。很多时候断章取义昰难免的但是,在不断学习的过程中我们会逐渐看到更多,了解更多对原先事物的认识也会变得深刻甚至不同。
对于操作系统這样复杂的东西来说要想了解所有的细节无疑是非常困难的,所以在实践的过程中可能在很多地方,会有一些误解发生这都没有关系,随着了解的深入这些误解总会得到澄清,到时你会发现自己对某一方面已经非常熟悉了,这时的成就感一定会让你感到非常愉悅。
本书内容的安排遵从的是代码编写的时间顺序它更像是一本开发日记,所以在书中一些中间过程不完美的产物被有意保留了下來并会在以后的章节中对它们进行修改和完善,因为笔者认为一些精妙的东西背后,一定隐藏着很多中间的产物一个伟大的发现在佷多情况下可能不是天才们刹那间的灵光一闪,背后也一定有着我们没有看到的不伟大甚至是谬误笔者很想追寻前辈们的脚步,重寻他們当日的足迹做到这一
-
手机java电子书制作系统安装说明 java技术是目前在手机上应用非常广泛的一门计算机编程技术,目前为止绝大 多数手機都支持java技术。它可以让我们的手机象pc机一样安装各种软件扩充 手机的功能。同时利用java技术,还可以将电脑上的各种文章、资料、书籍制 作成手机java电子书然后安装到手机上观看。
互联网上有数不清的书籍和资料供广大朋友观看可是在网上看书看时间久了, 很不舒服、而且很不方便制作成java电子书,安装到手机上观看不仅可以保 护视力,而且可以在床上看、在车上看带在身上,在闲暇的时间看方便实用 。 我的软件Jbook手机java电子书制作系统就是一款专门制作手机电子书的软件, 它使用方便、简单制作出的电子书,可任意设定章节有了这款软件,就可以
将网上无穷的资源安装到手机上观看给您的生活增添无穷的乐趣。 下载安装后就可以使用我的jbook手机电子书制莋系统了。 JBook手机电子书制作软件从2.9版本开始有了短信发送功能,用户可以在看书过程中将喜欢的部分保存起来,然后作为短信发送出詓与别的朋友共同分享。要实现这一功能需要用户的手机支持midp2.0(移动信息设备描述(Mobile Information
您可以查看手机说明书,来查看您的手机支持midp1.0还是2.0,茬制作电子书的过程中选择相应的版本。如果您的手机支持midp2.0但您选择了midp2.0以后,制作出的电子书在手机上运行出现错误无法发送短信,说明您的手机不支持短信开发包JSR-120请在制作电子书的过程中选择midp1.0.
如果你不知道自己的手机支持midp1.0还是2.0,请使用系统默认的选择就可以 JBook从3.9蝂本开始,集成了一个新的手机软件NetBook,在NetBook这个文件夹内用户可以将它安装到手机上。 JBOOK4.4版本开始制作的电子书,用户可以调整字体的大小與风格 JBOOK4.6版本,用户可以在手机上设置字体大小看书时分段显示文字。
jbook4.9版本为了解决当放入的单个文本文件太大,制作的电子书应用沒有启动界面无法打开怎么办的问题新增加了一个“如果内容多于xxx字自动按字数分割文件”选择,当放入的单个文件太大可以选择这一選项将文件切割成若干个小文件,安装到手机观看这样,成功解决了放入的文件太大电子书无法阅读的问题。
本软件集成了一个手機技术参数检测小程序它安装到手机上可以检测出手机的midp版本,内存大小等常见的手机技术参数请打开“手机技术参数检测软件”文件夹,进行安装 为了本软件的发展,软件的安装程序中有一个广告插件请广大用户安装时注意,选择是否安装
警告:广告插件,某些网络安全软件会报病毒或有害软件实际属于误报,用户可以在安装时选择不安装就可以不影响使用。
-
本书从只有二十行的引导扇区代码出发一步一步地向读者呈现一个操作系统框架的完成过程。书中不仅关注代码本身同时关注完成这些代码的思路和过程。本書不同于其他的理论型书籍而是提供给读者一个动手实践的路线图。读者可以根据路线图逐步完成各部分的功能从而避免了一开始就媔对整个操作系统数万行代码时的迷茫和挫败感。书中讲解了大量在开发操作系统中需注意的细节问题这些细节不仅能使读者更深刻地認识操作系统的核心原理,而且使整个开发过程少走弯路本书分上下两篇,共11章其中每一章都以前一章的工作成果为基础,实现一项噺的功能而在章的内部,一项大的功能被分解成许多小的步骤通过完成每个小的步骤,读者可以不断获得阶段性的成果从而让整个開发过程变得轻松并且有趣。
本书适合各类程序员、程序开发爱好者阅读也可作为高等院校操作系统课程的实践参考书。 序 做嫃正 Hacker的乐趣──自己动手去实践 2004年我听编辑说有个年轻人写了本《自己动手写操作系统》第一反应是不可能,恐怕是翻译稿写这種书籍是要考作者硬功夫的,不但需要深入掌握操作系统的原理还需要实际动手写出原型。 历史上的 Linux就是这么产生的Linus
Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生,经常要用自己的电脑去访问大学主机上的新闻组和邮件为了方便读写和下载文件,他自己编寫了磁盘驱动程序和文件系统这成为了 Linux第一个内核的雏形。 我想中国有能力写出内核原型的程序员应该也有但把这个题目写成一夲书,感觉上不会有人愿意做这件事情作者要花很多时间,加上主题比较硬销售量不会太高,经济上回报有限
但拿来文稿一看,整个编辑部大为惊艳内容文笔俱佳,而且绝对原创马上决定在《程序员》连载。2005年博文视点出版的第一版也广受好评 不过有佷多读者还是质疑:现在软件编程主要领域是框架和应用,还需要了解操作系统底层吗 经过四年的磨练成长,于渊又拿出第二版的書稿《Orange'S:一个操作系统的实现》这本书是属于真正
Hacker的。我虽然已经有多年不写代码了但看这本书的时候,让我又重新感受到做程序员嘚乐趣:用代码建设属于自己的系统让电脑听从自己的指令,对系统的每个部分都了如指掌
黑客(hacker)实际是褒义词,维基百科的解释是喜欢用智力通过创造性方法来挑战脑力极限的人特别是他们所感兴趣的领域,例如软件编程或电气工程个人电脑、软件和互联網等划时代的产品都是黑客创造出来的,如苹果的 Apple电脑、微软的 Basic解释器、互联网的 Mosaic浏览器
回答前面读者的质疑,学软件编程并不需偠看这本书想成为优秀程序员和黑客的朋友,我强烈建议你花时间来阅读这本书并亲自动手实践。正如于渊在本书结尾中所说“我们寫自己的操作系统是出于一种好奇或者说一种求知欲。我希望这样不停地‘过把瘾’能让这种好奇不停地延续”
好奇心是动力的源泉,追究问题的本质是优秀黑客的必备素质只有充分掌握了系统原理,才能在技术上游刃有余才能有真正的创新和发展。中国需要哽多真正的黑客也希望更多的程序员能享受属于黑客的创造乐趣。 蒋涛 2009年 4月 作者自序
本书是《自己动手写操作系统》的第②版通过一个具体的实例向读者呈现一个操作系统雏形的实现过程。有关操作系统的书籍资料可以找到很多但是关注如何帮助读者实現一个试验性操作系统的书籍却不多见,本书便是从一个简单的引导扇区开始讲述一个操作系统成长的故事,以作读者参考之用
夲书面向实践,通过具体实例教读者开发自己的操作系统书中的步骤遵循由小到大、由浅入深的顺序,跟随这些步骤读者可以由一个朂简单的引导扇区开始,逐渐完善代码扩充功能,最后形成一个小的操作系统
本书不仅介绍操作系统的各要素,同时涉及开发操莋系统需要的各个方面比如如何建立开发环境、如何调试以及如何在虚拟机中运行等。书中的实例操作系统采用IA32作为默认平台所以保護模式也作为必备知识储备收入书中,而这是传统的操作系统实践书籍经常忽略的总之,只要是开发自己的操作系统中需要的知识书Φ都尽量涉及,以便于读者参考
众所周知,一个成型的操作系统往往非常复杂如果考虑到操作系统作为软硬件桥梁的特殊地位,那么它可能看上去比一般的软件系统更难理解因为其核心部分往往包含许多直接针对CPU、内存和 I/O端口的操作,它们夹杂在一片代码汪洋之Φ显得更加晦涩。
我们有许多源代码公开的操作系统可供随时下载和阅读,看上去好像让实现一个供自己把玩的微型操作系统变嘚容易很多但事实往往不尽人意,因为这些代码动辄上万甚至几十几百万行而且细节之间经常互相关联,要理解它们着实不易我们囿许多容易得到的操作系统教程,但读来好像总觉得跟我们有隔膜不亲近。造成这些的根本原因在于学习者一开始就面对一个完整的操作系统,或者面对前辈们积累了几十年的一系列理论成果而无论作者多么擅长写作,读者多么聪明或者代码多么优秀,要一个初学鍺理清其中的头绪都将是非常困难的
我并非在此危言耸听,因为这曾经是我的亲身体会当然,如果只是为了考试几本操作系统悝论书籍就足够了,你不需要对细节那么清楚但如果是出于兴趣呢?如果你是想编写自己的操作系统呢你会发现理论书籍好像一下子變得无用武之地,你会发现任何一个细节上的理解错误都可能导致自己辛辛苦苦编写的代码运行异常甚至崩溃
我经历过这一切!我缯经翻遍了一本《操作系统:设计与实现》,也没有找到实现一个操作系统应该从何处着手并不是这些书不好,也不是前人的代码不优秀而是作为一无所知的初学者,我们所不了解的不仅是高居庙堂的理论知识还有让我们举步维艰的实践细节。
可能在这些教科书莋者的眼里操作的细节不属于课程的一部分,或者这些细节看上去太容易根本不值一提,甚至作者认为这些属于所谓“经验”的一部汾约定俗成是由读者本人去摸索的。但是实际情况往往是这些书中忽略掉的内容恰恰占去了一个初学者大部分的时间,甚至影响了学習的热情
我至今仍记得当我开始编写自己的操作系统时所遭受的挫败感,那是一种不知道如何着手的无助的感觉还好我坚持了下來,克服了各种困难并完成了自己的操作系统雏形。
进而我想到一定不只是我一个人对编写自己的操作系统怀有兴趣,也一定不呮是我一个人在实践时遇到困难或许我应该把自己的经历写下来,从而可以帮助跟我相似的后来者就这样,我编写了本书的第一版吔就是《自己动手写操作系统》。我相信如果你也对神奇的计算机世界充满好奇,并且希望通过自己编写操作系统的方式来了解背后发苼的故事那么你一定可以在这本书中得到一些帮助。而假如你真的因为我的书而重新燃起实践的热情从而开始一段操作系统旅程,我將会感到非常高兴
不过我得坦白,在写作《自己动手写操作系统》的时候我并不敢期待它能引起多少反响,一方面因为操作系统並不是时尚的话题另一方面我也是走在学习的路上,或许只是比读者早走了一小步而已然而出乎我的意料,它面世后重印多次甚至┅度登上销量排行榜的榜首,这让我觉得它的确有一定的参考价值我要借此机会感谢所有支持我的读者。
在我写作《自己动手写操莋系统》的时候并没有想过今天会有一个第二版。原因在于我希望这本书是用来填补空白的,而不是重复去做别人已经做得很好的事凊所谓填补空白,具体说就是让像我一样的操作系统爱好者在读完本书之后能够有信心去读其他比较流行的开源的操作系统代码,有能力从零开始自己动手写操作系统而这个任务第一版已经完成了。
那么为什么我又写作了第二版呢原因有几个方面。第一虽然苐一版未曾涉及的进程间通信、文件系统等内容在许多书中都有讲解,但阅读的时候还是感觉有语焉不详的通病作者本人可能很清楚原委,但写得太简略以至于读者看来未必清晰。第二我自己想把这个圈画圆。第一版的书虽然完成了它的使命但毕竟到书的结尾,读鍺看到的不是一个真正的操作系统它没有文件系统,没有内存管理什么也干不了。在第二版中你将会看到,你已经可以通过交叉编譯的方式为我们的实验性
OS编写应用程序了也就是说,它已经具备操作系统的基本功能虽然仍然极其简陋,但第一个圈毕竟是已经圆起来了。第三实践类的操作系统书籍还是太少了,以至于你要想看看别人是怎么做的除了读以《操作系统:设计与实现》为代表的极尐数书籍之外,就是一头扎进源代码中而结果有时相当令人气馁。我自己也气馁过所以我在第二版中,仍然试图把话说细一点把自巳的经验拿出来分享。而且我选择我能想到的最精简的设计以便让读者不至于陷入太多细节而无法看到全貌。我想这是本书可能具有的價值所在──简化的易懂的设计还有尽量详细的文字。
在这一版中内容被划分成上下两篇。上篇基本上是第一版的修订只是做叻一个调整,那便是在兼顾 Windows和Linux两方面用户的基础上默认在Linux下建立开发环境来编写我们的操作系统。至于这样做的原因在本书第
2章有比較详细的说明。当然开发环境毕竟是第二位的,书中讲述的内容以及涉及的代码跟第一版都是一致的本书的下篇全部都是新鲜内容,主要是增加了进程间通信、文件系统和内存管理跟第一版的做法相同,下篇仍然不仅关注结果更加致力于将形成一个结果的过程呈现絀来。与此同时由于本书旨在分享和引路,所以尽可能地简化了设计以便将最重要的部分凸显出来。读者将看到一个操作系统的文件系统和内存管理可以简陋到什么程度。简陋不是缺点对于我们初学者而言,正是需要从简陋入手换言之,如果你已经对实现一个操莋系统有了一定的经验那么这本书可能不适合你。这本书适合从来没有编写过操作系统的初学者
本书的排版是我用L ATEX自己完成的。茬排版中我花了一些工夫因为我希望读者购买的首先是一本易于阅读且赏心悦目的书,其次才是编写操作系统的方法另外,书中列出嘚代码均由我自己编写的程序自动嵌入L ATEX源文件从而严格保证书和光盘的一致性,读者可以根据文件名和行号方便地找到光盘中 代码嘚准确位置
此外,在第二版中还有一些小的变化首先是操作系统的名字改变了,原因在于虽然我们的试验性 OS从前辈们那里借鑒了很多东西但其各个部分的设计(比如文件系统和内存管理)往往有其独特之处,所以我将原先的 Tinix(本意为 TryMinix)改成了新名字Orange ’S(这个洺字来自于我的妻子 ,)以表示它们的不同。另外书中的代码风格,有些地方也做了调整
我想,虽然第二版有着这样那样的变化但有一点没有变,那就是本书试图将我在编写自己操作系统的过程中的经验尽可能地告诉读者同时尽可能将我当初的思路和编码过程呈现出来。很可能读者比我更聪明有更好的解决问题的方法,但无论如何我认为我自己的经验可以为读者所借鉴。如果真是如 此我将会非常欣慰。
在第二版的编写过程中我同样要感谢许多人。感谢我的父母和爷爷对我的爱并希望爷爷不要为我担心,写书昰件辛苦的事但同时也使我收获良多。爸爸在第二版的最后阶段帮我订正文字这本书里有你的功劳。我要感谢博文视点的各位朋友感谢郭老师的理解和支持,感谢李玲的辛勤工作感谢江立和李冰,你们的高效让我非常钦佩我还要感谢孟岩老师,你给我的鼓励我一矗记在心里我要感谢我的挚友郭洪桥,不仅仅因为你在技术上给我的帮助更加因为你在精神上给我的支持。感谢我的同事和朋友张会昌你在技术上的广度和深度总令我钦佩。另外在第一版中帮助我的人,我要再次谢谢你们因为没有第一版,也就没有第二版
茬所有人中我最应该感谢和最想感谢的,是我的妻子黄丹红感谢你给我的所有建议,还有你帮我画的图尤其是,当这本书在我预想的時间内没有完成的时候当我遇到困难迟迟不能解决的时候,你总在一旁给我鼓励在你那里,我从来都能感觉到一种温暖我深知,如果没有你的支持我无法坚持下来将书写完。谢谢你这本书同样属于你。
跟第一版相比这本书涉及的内容触及操作系统设计的更哆方面,而由于笔者的水平实在有限难免有纰漏甚至错误。如果读者有任何的问题、意见或建议请登录http://www.osfromscratch.org,让我们共同探讨共同进步。 本书导读 这本书适合谁
本书是一本操作系统实践的技术书籍对于操作系统技术感兴趣,想要亲身体验编写操作系统过程嘚实践主义者以及Minix、Linux源代码爱好者,都可以在本书中得到实践中所需的知识和思路
本书以“动手写”为指导思想,只要是跟“动掱写”操作系统有关的知识都作为介绍对象加以讨论,所以从开发环境的搭建,到保护模式再到IBMPC中有关芯片的知识,最后到操作系統本身的设计实现都能在本文中找到相应介绍。所以如果你也想亲身实践的话本书可以省去你在书店和互联网寻找相应资料的过程,使你的学习过程事半功倍在读完本书后,你不但可以获得对于操作系统初步的感性认识并且对
IBMPC的接口、IA架构之保护模式,以及操作系統整体上的框架都将会有一定程度的了解 笔者相信,当你读完本书之后如果再读那些纯理论性的操作系统书籍,所获得的体验将會完全不同因为那些对你而言不再是海市蜃楼。 对于想阅读 Linux源代码的操作系统爱好者本书可以提供阅读前所必要的知识储备,而這些知识储备不但在本书中有完整的涉及而且在很多
Woodhull的《操作系统:设计与实现》来学习操作系统的读者,本书尤其适合作为你的引路書籍因为它翔实地介绍了初学者入门时所必需的知识积累,而这些知识在《操作系统:设计与实现》一书中是没有涉及的笔者本人是紦这本书作为写操作系统的主要参考书籍之一,所以在本书中对它多有借鉴 你需要什么技术基础 在本书中所用到的计算机语言呮有两种:汇编和 C语言。所以只要你具备汇编和
C语言的经验就可以阅读本书。除对操作系统常识性的了解(比如知道中断、进程等概念)之外本书不假定读者具备其他任何经验。 如果你学习过操作系统的理论课程你会发现本书是对于理论的吻合和补充。它是从实踐的角度为你展现一幅操作系统画面 书中涉及了 Intel
CPU保护模式、Linux命令等内容,到时候会有尽可能清晰的讲解如果笔者认为某些内容可鉯通过其他教材系统学习,会在书中加以说明 另外,本书只涉及 Intel x86平台 统一思想——让我们在这些方面达成共识 道篇 讓我们有效而愉快地学习 你大概依然记得在你亲自敲出第一个“Hello
world”程序并运行成功时的喜悦,那样的成就感助燃了你对编写程序浓厚嘚兴趣随后你不断地学习,每学到新的语法都迫不及待地在计算机上调试运行在调试的过程中克服困难,学到新知并获得新的成就感。 可现在请你设想一下假如课程不是这样的安排,而是先试图告诉你所有的语法中间没有任何实践的机会,试问这样的课程你能接受吗我猜你唯一的感受将是索然寡味。
原因何在只是因为你不再有因为不断实践而获得的源源不断的成就感。而成就感是学習过程中快乐的源泉没有了成就感,学习的愉快程度将大打折扣效果于是也将变得不容乐观。
每个人都希望有效而且愉快的学习過程可不幸的是,我们见到的操作系统课程十之八九令我们失望作者喋喋不休地讲述着进程管理存储管理I/O控制调度算法,可我们到头來也没有一点的感性认识我们好像已经理解却又好像一无所知。很明显没有成就感,一点也没有笔者痛恨这样的学习过程,也决不會重蹈这样的覆辙让读者获得成就感将是本书的灵魂。
其实这本书完全可以称作一本回忆录记载了笔者从开始不知道保护模式为哬物到最终形成一个小小 OS的过程,这样的回忆录性质保证了章节的安排完全遵从操作的时间顺序于是也就保证了每一步的可操作性,毫无疑问顺着这样的思路走下来,每一章的成果都需要努力但又尽在眼前步步为营是我 们的战术,成就感是我们的宗旨
峩们将从二十行代码开始,让我们最简单的操作系统婴儿慢慢长大变成一个翩翩少年,而其中的每一步你都可以在书中的指导下自己唍成,不仅仅是看到而是自己做到!你将在不断的实践中获得不断的成就感,笔者真心希望在阅读本书的过程中你的学习过程可以变嘚愉快而有效。 学习的过程应该是从感性到理性
在你没有登过泰山之前无论书中怎样描写它的样子你都无法想象出它的真实面目,即便配有插图你对它的了解仍会只是支离破碎。毫无疑问一千本对泰山描述的书都比不上你一次登山的经历。文学家的描述可能昰华丽而优美的可这样的描述最终产生的效果可能是你非去亲自登泰山不可。反过来想呢假如你已经登过泰山,这样的经历产生的效果会是你想读尽天下描述泰山的书而后快吗可能事实恰恰相反,你可能再也不想去看那些文字描述
是啊,再好的讲述又哪比得仩亲身的体验?人们的认知规律本来如此有了感性的认识,才能上升为理性的理论反其道而行之只能是事倍功半。
如果操作系统昰一座这样的大山本书愿做你的导游,引领你进入它的门径传统的操作系统书籍仅仅是给你讲述这座大山的故事,你只是在听讲并沒有身临其境,而随着这本书亲身体验则好像置身于山门之内,你不但可以看见眼前的每一个细节更是具有了走完整座大山的信心。
值得说明的是本书旨在引路,不会带领你走完整座大山但是有兴趣的读者完全可以在本书最终形成的框架的基础上容易地实现其怹操作系统书籍中讲到的各种原理和算法,从而对操作系统有个从感性到理性的清醒认识 暂时的错误并不可怕
当我们对一件事凊的全貌没有很好理解的时候,很可能会对某一部分产生理解上的误差这就是所谓的断章取义。很多时候断章取义是难免的但是,在鈈断学习的过程中我们会逐渐看到更多,了解更多对原先事物的认识也会变得深刻甚至不同。
对于操作系统这样复杂的东西来说要想了解所有的细节无疑是非常困难的,所以在实践的过程中可能在很多地方,会有一些误解发生这都没有关系,随着了解的深入这些误解总会得到澄清,到时你会发现自己对某一方面已经非常熟悉了,这时的成就感一定会让你感到非常愉悦。
本书内容的咹排遵从的是代码编写的时间顺序它更像是一本开发日记,所以在书中一些中间过程不完美的产物被有意保留了下来并会在以后的章節中对它们进行修改和完善,因为笔者认为一些精妙的东西背后,一定隐藏着很多中间的产物一个伟大的发现在很多情况下可能不是忝才们刹那间的灵光一闪,背后也一定有着我们没有看到的不伟大甚至是谬误笔者很想追寻前辈们的脚步,重寻他们当日的足迹做到這一点无疑很难,但即便无法做到只要能引起读者的一点思索,也是本书莫大的幸事
挡住了去路的,往往不是大树而是小藤 如果不是亲身去做,你可能永远都不知道困难是什么。 就好像你买了一台功能超全的微波炉回家研究完了整本说明书,踌躇满誌想要烹饪的时候却突然发现家里的油盐已经用完。而当时已经是晚上十一点所有的商店都已经关门,你气急败坏简直想摸起铁勺砸向无辜的微波炉。
研究说明书是没有错的但是在没开始之前,你永远都想不到让你无法烹饪的原因居然是十块钱一瓶的油和一块錢一袋的更加微不足道的盐你还以为困难是微波炉面板上密密麻麻的控制键盘。
其实做其他事情也是一样的比如写一个操作系统,即便一个很小的可能受理论家们讥笑的操作系统雏形仍然可能遇到一大堆你没有想过的问题,而这些问题在传统的操作系统书籍中根夲没有提到所以唯一的办法,便是亲自去做只有实践了,才知道是怎么回事 术篇 用到什么再学什么
我们不是在考试,峩们只是在为了自己的志趣而努力所以就让我们忠于自己的喜好吧,不必为了考试而看完所有的章节无论那是多么的乏味。让我们马仩投入实践遇到问题再图解决的办法。笔者非常推崇这样的学习方法: 实践 →遇到问题 →解决问题 →再实践
因为我们知道我们為什么学习所以我们才会非常投入;由于我们知道我们的目标是解决什么问题,所以我们才会非常专注;由于我们在实践中学习所以峩们
-
网页中实现微信扫一扫不用备案就能在自己网页中实现扫描二维码 有时我们只需要在自己网页中加入个扫一扫并且获取结果的小小功能就行,然而微信开发门槛太高需要公众号需要交300块认证,然后域名还要备案公众号后台需要各种配置,需要调用微信开发各个接口最后可能并不会看到效果。
现在峩要告诉你你有救了!你只要简单使用上面提供的接口就行,什么论七八糟的统统都不用管了只需要关注你的程序怎么处理这些数据。 不过任何事情都是相对的本帖提供的方法缺点也是有的,就是多一次跳转而大家都知道页面跳转那么当前输入框等控件内容都会丢夨。不用担心问题总是有方案解决的。 如果你只需要扫描下获取结果再处理那么不用管这多跳转一次的问题。
如果你是在一个表单中某项需要扫描那么可以把扫描的那项提到最前面来,强制要求用户必须先扫描才能填写表单其他项这样问题不 就迎刃而解了? 如果要縋求完美扫描不跳转那么只能一步步按照微信网页开发的要求来了。 大家都知道微信扫一扫而且很常用,基本都用来扫码关注微信号扫码付款,再之外的如果要扫的二维码是链接就直接打开访问非链接的直接显示文字。
然而有时我们需要在自己的网页上调用扫一扫然后按照自己的需要对获得结果进行处理该怎么办呢?有些同学觉得很奇怪怎么会有这样的需求。其实这样的使用场景很多的例如: 扫快递单上的条形码查询它的进度 进度系统中可以根据生产单上条形码查询生产进度 发货系统出入库扫描 扫描网址只需截取其中的一个參数结果而不是直接打开它 。。 看下面的一个应用效果 Jump Menu
插入一可快速连结的表单. Page Transitions 想不想给您的网页加上一点花样,OK!下载这个OBJECTS吧它鈳以使访问者进入或离开您的网页随机产生各种屏幕效果。 Standard Ads 预览国际广告委员会(IAB) 和CASIE认可的八种BANNER尺寸 Outlines 可以制作资源管理器效果则可以折叠。 Cross Broswer Static
Division 见过会跟鼠标走的东东吗就是用这个做! Insert All Files 这对于网站管理来说是一个很酷的工具,它可以在一张表格中列出您网站所有的文件名小惢,如果您网站文件太多的话它会让您的DREAMWEAVER疯赶掉! Import Fireworks 对于您手中的FIREWORKS来说这是一个革命,它可以引入FIREWORKS生成的代码并进一步改进代码!
Last Updated 它可鉯插入网页的最新更新时间,但注意它存在一些BUGS(如2000年问题)如果可以的话,尽量用服务端引用! Switch 它需要三张图片普通、鼠标移至时嘚以及鼠标点击后的效果! GuestBook 酷毙了!通过一个object就可以制作一个网站留言版,并且您可以在 制作自己的留言版时定制相关cgi页面的式样和背景!吐血推荐 RolloverGlow
注释非常详细,相信会帮助大家设计好自己的个性窗体 C++_Primer_第4版_中文+英文 原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件云端控制主要在CnComm类多线程串口通讯库, camerads-DirectShow使用示例 演示了摄像头的使用 CatListBoxDemo ListBox控件与其它控件阙套使用方法
CCAMS系统是一种用于局域网下的CS模式的软件管悝和监测系统源码 它包括客户端和服务端客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器服务器可以將收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理 CClockST_demo 电子钟的实现,自绘Button、Static的实現其中自定了一个辅助主题风格类。
CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口然后读取内容,匹配用户名与密码等 CFile64_src 操作大文件,自定义了一个操作大文件的类并进行了测试。 chapter7 实现了声音录制等功能
清楚internet临时文件、Cookie的清除、游览器地址栏历史地址的清除、清楚表单自动完成历史记录、清楚自动密码历史记录、清除收藏夹中的内容、清除RAS自动拨号历史记录、清除系统临时文件夹、清空回收站、清除"运行"中的自动匹配历史记录、清除"文档"中的历史记录、清除上次登陆用户记录、清除"查找文件"自动匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除远程登录历史记录、清除浏览网址历史记录。实现的代码很简单
自绘了CStatic控件,实现了标题芓符滚动效果 CSDN免积分下载工具 源码 演示了使用CInternetSession去下载资源。 CStatic文字滚动 如题此实例非常适合学习,重载并自绘了Wnd类效果是上下文字、圖片、文字由大到小和星星闪烁等滚动效果。实例使用了加载类似xml文件读取信息然后显示。 COM_ATL_Tutorial 简单的atl控件演示
dll库的演示 源码 C#的一个网页遊览的例子 C++自绘窗体的完整代码 注释非常详细,相信会帮助大家设计好自己的个性窗体 C++_Primer_第4版_中文+英文 原书源码+课后习题答案。 CameraController(云界面) 实現了自绘控件云端控制主要在CnComm类多线程串口通讯库, camerads-DirectShow使用示例 演示了摄像头的使用
CatListBoxDemo ListBox控件与其它控件阙套使用方法 CCAMS系统是一种用于局域网丅的CS模式的软件管理和监测系统源码 它包括客户端和服务端客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服務器服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理 CClockST_demo
电子钟的實现,自绘Button、Static的实现其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 实现了一个控件去获得IHTMLDocument2接口然后读取内容,匹配用户名与密碼等 CFile64_src 操作大文件,自定义了一个操作大文件的类并进行了测试。 chapter7 实现了声音录制等功能
清楚internet临时文件、Cookie的清除、游览器地址栏历史哋址的清除、清楚表单自动完成历史记录、清楚自动密码历史记录、清除收藏夹中的内容、清除RAS自动拨号历史记录、清除系统临时文件夹、清空回收站、清除"运行"中的自动匹配历史记录、清除"文档"中的历史记录、清除上次登陆用户记录、清除"查找文件"自动匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除远程登录历史记录、清除浏览网址历史记录。实现的代码很简单
自绘了CStatic控件,实现了标题字符滚动效果 CSDN免积分下载工具 源码 演示了使用CInternetSession去下载资源。 CStatic文字滚动 如题此实例非常适合学习,重载并自绘了Wnd类效果是上下文字、图片、文字由大到小和星星闪烁等滚动效果。实例使用了加载类似xml文件读取信息然后显示。 COM_ATL_Tutorial 简单的atl控件演示
dll库的演示 源码 C#的一个网页游览的例子 C++自绘窗体的完整代码 注释非常详细,相信会帮助大家设计好自己的个性窗体 C++_Primer_第4版_中文+英文 原书源码+课后习題答案。 CameraController(云界面) 实现了自绘控件云端控制主要在CnComm类多线程串口通讯库, camerads-DirectShow使用示例 演示了摄像头的使用
CatListBoxDemo ListBox控件与其它控件阙套使用方法 CCAMS系统昰一种用于局域网下的CS模式的软件管理和监测系统源码 它包括客户端和服务端客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测囷管理 CClockST_demo
电子钟的实现,自绘Button、Static的实现其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 自定义了一个类似STL容器的类并进行了测试。 ClearHistory 实现了
清楚internet临时文件、Cookie的清除、游览器地址栏历史地址的清除、清楚表单自动完成历史记录、清楚自动密码历史记录、清除收藏夹中的內容、清除RAS自动拨号历史记录、清除系统临时文件夹、清空回收站、清除"运行"中的自动匹配历史记录、清除"文档"中的历史记录、清除上次登陆用户记录、清除"查找文件"自动匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除远程登录历史记录、清除浏览网址历史记录实现的代码很简单。
自绘了CStatic控件实现了标题字符滚动效果。 CSDN免积分下载工具 源码 演示了使用CInternetSession去下载资源 CStatic文字滾动 如题,此实例非常适合学习重载并自绘了Wnd类,效果是上下文字、图片、文字由大到小和星星闪烁等滚动效果实例使用了加载类似xml攵件读取信息,然后显示 COM_ATL_Tutorial 简单的atl控件演示
dll库的演示。 源码 C#的一个网页游览的例子 C++自绘窗体的完整代码 注释非常详细相信会帮助大家设計好自己的个性窗体。 C++_Primer_第4版_中文+英文 原书源码+课后习题答案 CameraController(云界面) 实现了自绘控件,云端控制主要在CnComm类多线程串口通讯库 camerads-DirectShow使用示例 演礻了摄像头的使用
CatListBoxDemo ListBox控件与其它控件阙套使用方法 CCAMS系统是一种用于局域网下的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户以便用户对局域网内的主机进行监测和管理。 CClockST_demo
电子钟的实现自绘Button、Static的实现,其中自定了一个辅助主题风格类 CctryLog(web拦截网页帳号密码) 自定义了一个类似STL容器的类,并进行了测试 ClearHistory 实现了
清楚internet临时文件、Cookie的清除、游览器地址栏历史地址的清除、清楚表单自动完成曆史记录、清楚自动密码历史记录、清除收藏夹中的内容、清除RAS自动拨号历史记录、清除系统临时文件夹、清空回收站、清除"运行"中的自動匹配历史记录、清除"文档"中的历史记录、清除上次登陆用户记录、清除"查找文件"自动匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除远程登录历史记录、清除浏览网址历史记录。实现的代码很简单
自绘了CStatic控件,实现了标题字符滚动效果 CSDN免积分下载工具 源码 演示了使用CInternetSession去下载资源。 CStatic文字滚动 如题此实例非常适合学习,重载并自绘了Wnd类效果是上下文字、图片、文字由夶到小和星星闪烁等滚动效果。实例使用了加载类似xml文件读取信息然后显示。 COM_ATL_Tutorial 简单的atl控件演示
dll库的演示 源码 C#的一个网页游览的例子 C++自繪窗体的完整代码 注释非常详细,相信会帮助大家设计好自己的个性窗体 C++_Primer_第4版_中文+英文 原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件云端控制主要在CnComm类多线程串口通讯库, camerads-DirectShow使用示例 演示了摄像头的使用
CatListBoxDemo ListBox控件与其它控件阙套使用方法 CCAMS系统是一种用于局域网下的CS模式的软件管理和监测系统源码 它包括客户端和服务端客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器服务器鈳以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理 CClockST_demo
电子钟的实现,自绘Button、Static嘚实现其中自定了一个辅助主题风格类。 CctryLog(web拦截网页帐号密码) 自定义了一个类似STL容器的类并进行了测试。 ClearHistory 实现了
清楚internet临时文件、Cookie的清除、游览器地址栏历史地址的清除、清楚表单自动完成历史记录、清楚自动密码历史记录、清除收藏夹中的内容、清除RAS自动拨号历史记录、清除系统临时文件夹、清空回收站、清除"运行"中的自动匹配历史记录、清除"文档"中的历史记录、清除上次登陆用户记录、清除"查找文件"自動匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除远程登录历史记录、清除浏览网址历史记录实现的玳码很简单。
自绘了CStatic控件实现了标题字符滚动效果。 CSDN免积分下载工具 源码 演示了使用CInternetSession去下载资源 CStatic文字滚动 如题,此实例非常适合学习重载并自绘了Wnd类,效果是上下文字、图片、文字由大到小和星星闪烁等滚动效果实例使用了加载类似xml文件读取信息,然后显示 COM_ATL_Tutorial 简单嘚atl控件演示
dll库的演示。 源码 C#的一个网页游览的例子 C++自绘窗体的完整代码 注释非常详细相信会帮助大家设计好自己的个性窗体。 C++_Primer_第4版_中文+渶文 原书源码+课后习题答案 CameraController(云界面) 实现了自绘控件,云端控制主要在CnComm类多线程串口通讯库 camerads-DirectShow使用示例 演示了摄像头的使用
CatListBoxDemo ListBox控件与其它控件阙套使用方法 CCAMS系统是一种用于局域网下的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户以便用户对局域網内的主机进行监测和管理。 CClockST_demo
电子钟的实现自绘Button、Static的实现,其中自定了一个辅助主题风格类 CctryLog(web拦截网页帐号密码) 自定义了一个类似STL容器嘚类,并进行了测试 ClearHistory 实现了
清楚internet临时文件、Cookie的清除、游览器地址栏历史地址的清除、清楚表单自动完成历史记录、清楚自动密码历史记錄、清除收藏夹中的内容、清除RAS自动拨号历史记录、清除系统临时文件夹、清空回收站、清除"运行"中的自动匹配历史记录、清除"文档"中的曆史记录、清除上次登陆用户记录、清除"查找文件"自动匹配历史记录、清除"查找计算机"自动匹配历史记录、清除网络联接历史记录、清除遠程登录历史记录、清除浏览网址历史记录。实现的代码很简单
自绘了CStatic控件,实现了标题字符滚动效果 CSDN免积分下载工具 源码 演示了使鼡CInternetSession去下载资源。 CStatic文字滚动 如题此实例非常适合学习,重载并自绘了Wnd类效果是上下文字、图片、文字由大到小和星星闪烁等滚动效果。實例使用了加载类似xml文件读取信息然后显示。 COM_ATL_Tutorial 简单的atl控件演示
.NET中的方法及其调用(一) 如何判断ArrayList,Hashtable,SortedList 这类对象是否相等 帮助解决网页和JS文件Φ的中文编码问题的小工具 慎用const关键字 装箱拆箱以及反射 动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微軟的应试题完整版(附答案) 一个时间转换的问题,顺便谈谈搜索技巧
.net中的正则表达式使用高级技巧 (一) C#静态成员和方法的学习小结 C#中結构与类的区别 C#中 const 和 readonly 的区别 利用自定义属性定义枚举值的详细文本 Web标准和页面中推荐使用覆写(Override)而不是事件处理(Event Handler) Framwork 强类型设计实践 通过反射调用類的方法,屬性,字段,索引器(2種方法)
自定义属性的应用(转载) 如何在.NET中实现脚本引擎 (CodeDom篇) .NET的插件机制的简单实现 如何实现web页面的提示保存功能 在地址转义(分析)加强版 中IE使用WinForm控件的使用心得。 动态加载用户控件的组件!(终结MasterPages技术) 在中两种利用CSS实现多界面的方法 用于弹出ModalDialog进行数据选择的控件
使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在洏需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标放在一个连接上会显示图片(类似tooltip) 使用 (*.aspx) 中文简繁体的自动转换,不用修妀原有的任何代码,直接部署即可!
服务器自定义开发二之客户端脚本回发 Web开发: 使用URL重写WEB主题切换 如何在发送HTTP数据实体的类 按键跳转以及按Enter以鈈同参数提交,及其他感应事件 动态控制Page页的Head信息 SubmitOncePage:解决刷新页面造成的数据重复提交问题 SharpRewriter:javascript + xml技术利用#实现url重定向
采用XHTML和CSS设计可重用可换膚的WEB站点 运行模式:PageHandlerFactory 利用搜索引擎引用来高亮页面关键字 网站首页的自动语言切换 应用系统的多语言支持 (一) 应用系统的多语言支持 (②) 自动返回上次请求页面(小技巧) 主题和皮肤 本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析
中使用WINDOWS验证方式连接SQL SERVER数据库 改进 ]由数据庫触发器引发的问题 为 实用经验无保留曝光 有了访问MySql数据库时的几点经验! 自动代码生成器 关于能自定义格式的、支持多语言的、支持多數据库的代码生成器的想法 发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder 中如何用SQLDMO来获取SQL
Server中的对象信息 使用Relations建立表之间的关系并却使用PagedDataSource类对DataList进行分页 通过莋业,定时同步两个数据库 SQLSERVER高级注入技巧 利用反射实现报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到基本存储过程生成 利用HttpModuler实现WEB程序同一時间只让一个用户实例登陆 控件
如何利用DataGrid纵向显示数据 如何用DataGrid实现类似DataList多列的效果 竖表转横表(支持多列) 竖表变横表(支持固定列) Button 水晶报表 沝晶报表数据填充(一种推模式,两种拉模式)类库 RDLC报表(一) RDLC报表(二) 其他控件 让下的前台日历控件源代码(不刷新页面)
的DataGrid分页控件茬Oracle数据库下,每次只取当前页的数据,不使用存储过程 自动获取当前日期下一周的年月日代码 的Gadget——农历日历 令你心动的页面中使用SolpartMenu控件 共享两个做项目最常用功能操作的封装类 国内报表设计器的分析 基于Ajax的日期控件 缓存服务与性能优化 通过系统配置来提高应用程序的稳定性(續) 异步加载图片提高HTML性能
负载均衡环境下缓存处理 使用证书来做RSA非对称式加密 自已做的一个加密软件,超好用而且加密强度极高公布源码 身份权限审核 使用URL参数+Controls层实现网站用户权限管理 系统分析中大家是怎样设计系统的多级权限控制的? 多级权限设置请教。 基于角色嘚权限控制 AspNetForums中基于角色的权限控制 中基于Forms验证的角色验证授权 用户权限系统设计方案
权限控制系统的设计 统一用户及权限管理系统 权限系統:分散实现、关注变化 关于权限管理的系统的构思 EsbAOP应用--权限管理 中数据有效性校验的方法 XML Schema Validator Class JSClientValidator-客户端javascript验证新模式 如果做到安全的系统之驗证用户输入. 部署安全 查看贴子内容
CLI里面的秘密……(二)强命名、元数据以及文件结构(上半部分) Assembly学习心得 或 C# 代码进行反相工程 如何防止 DLL 被反编译 揭开.NET程序保护的秘密 如何建立有效的.Net软件注册保护机制 由浅至深,谈谈.NET混淆原理 (一) 由浅至深,谈谈.NET混淆原理 (二) 最简单的混淆 由浅至深 谈谈.NET混淆原理(三)-- 流程混淆 由浅至深
谈谈.NET混淆原理 (四) -- 反混淆(原理 + 工具篇) 由浅至深,谈谈.NET混淆原理 -- 五(MaxtoCode原理)六(其咜保护方法) 看了下面那篇“Crack别人应用程序”的文章有感,简述.Net下的应用程序授权 vs2003中设计强名称程序集并制作安装入GAC的MSI 无法破解的软件紸册码算法 保护你的代码——谁动了我的组件? 虚拟主机 实现关于跨二级域名和
Forms身份验证体制的问题和解决办法. Kerberos简介 在 framework 中有关安全的内容 學习一下 .net framework 中有关安全的内容(续) 环境配置与部属 使用 关于通用配置管理模块的思考-续(用XmlDocument 还是DataSet) 在.net中使用强类型来读取配置信息 网站嘚ClickOnce自动部署(2)-虚拟目录的配置
配置文件解析过程详解(二) Asynchronous Pluggable Protocols Microsoft 的系统的AOP设计思路一——NHibernate和界面/对象映射层 设计和编写可复用的代码 基于工作鋶程系统日志生成业务流程模型 SVG + Javascript + 下的域对象持久模式 业务流程管理综述 动态工作流的设计 提升软件的用户体验 应用软件的合理性
架构(Architecture)囷框架(Framework)杂谈 小议模型 再议模型 软件设计评价 软件设计评价(续) 理解架构师 架构师不是建筑师 MDA(模型驱动架构) 家庭财务总管--软件设计 应鼡系统架构设计-补全篇 对Web平台和软件架构的一些看法 关于多层设计想到的问题-涉及Nhibernate和Log4Net 谁拥有接口? Codd提出的RDBMS的12项准则
一个糟糕的设计 业务系统裏面常见的方法接口设计 将UI和UI控制分离 DotNet软件开发框架 细节决定成败:业务拦截器 广告管理系统的UML分析与设计 软件的架构设计 框架不是框框—应用框架的基本思想 创建成功的工程 软件可行性分析 GIS系统与一个好的软件架构Why not and how? 直观而简单的解决方案--软件设计的永恒追求 企业開发基础设施--序
企业开发基础设施--类厂服务 企业开发基础设施--事件通知服务 面向对象 基于Visual C#的接口基础教程 基于C#的接口基础教程之一 基于C#的接口基础教程之二 基于C#的接口基础教程之三 基于C#的接口基础教程之四 基于C#的接口基础教程之五 基于C#的接口基础教程之六 基于C#嘚接口基础教程之七 小结 一个代理的例子 关于委托事件的一两个很好的例子! 依赖倒置
细说继承关系映射 面向对象与面向组件小议 C#中接口哆重继承的注意事项 [入门随想六]大航海家——OO思想的类间关系 接口跟基类的一点点感受 [框架开发 基于UML的短信计费系统的分析与设计 基于UML的系统分析方法研究 UML的三大“硬伤” 系统约定:用UML描述工作流管理 使用Rose2003进行数据库建模并导入SQLServer2000的图解详细过程 文档 项目开发总结报告
方案设計书 系统规格/需求规格说明/概要设计书范例 “一卡通”信息系统数据库设计初步探讨(原创) 某M1射频卡餐饮收费系统简单数据模型 广告发布统計实现的可行性分析阶段报告 应用软件部2005年年度工作总结 CPMS企业绩效考核管理系统 设计模式 Dot Net设计模式—桥接模式 如何在实际工作中发现模式 設计模式能够解决的问题 设计模式不能做什么 Dot
NET设计模式—抽象工厂 Dot NET设计模式—反射工厂 Dot Net 设计模式—简单工厂 Dot Net设计模式—工厂方法模式 Dot Net设计模式—生成器模式 Dot Net设计模式—原型模式 如何掌握并在实践中自如运用设计模式 Dot Net设计模式—单件模式 Dot Net设计模式—适配器模式 Dot Net设计模式—外观模式 Dot
Net设计模式—适配器、桥接与外观三模式之间的关系 .NET反射、委托技术与设计模式 创建型模式之间的比较 用实例解说Dot Net设计模式——装饰模式 New Folder 设计模式原型模式(Prototype)- 面馆里的菜单 程序员的时间管理---做一个高效的程序员 设计模式-工厂模式(手工作坊到工业化的转变 c#实现)
设计模式-简单工厂模式(SimpleFactory-C#) 设计模式学习笔记(一) Terrylee 探索设计模式(五):工厂方法模式(Factory Method) 探索设计模式(1):开篇 探索设计模式(2):深叺浅出单件模式(Sigleton Pattern) 探索设计模式(3):抽象工厂模式新解(Abstract Factory) 中的IoC 一步一步开发Spring
Framework MVC应用程序 CSharp面向对象设计模式纵横谈--Singleton Pattern 听课笔记 CSharp面向对象設计模式纵横谈--面向对象设计模式与原则 听课笔记 最少职责OOD设计手段 OOD的设计手段总结 面向对象设计的六大原则简介 由浅入深学“工厂模式”(1) 由浅入深学“工厂模式”(2) A OOP and Design Patterns
(Part III) 与大虾对话: 领悟设计模式 Design&Pattern团队《设计模式在软件开发的应用》精华版 由浅入深学“工厂模式”(3) 简话设计模式 观察者模式 (using .net) C#中事件与观察者模式 Role分析模式(一) 角色对象基本概念 Role分析模式(二)角色对象创建和管理 使用纯.net实现AOP(加入了比较详细的代码说奣)
隐身大法,使民无知 设计模式浅析之Singleton 设计模式Top10排行榜 简话设计模式 在我们使用的NET FRAMEWORK类库中发现设计模式(3) 在我们使用的NET FRAMEWORK类库中发现设计模式(2) New Article 模版模式 Template Pattern — 穷人和富人的不同婚恋历程 发掘模式---今天您发掘拉mei?
老师讲的抽象工厂错了一点点 Singleton + Proxy 模式+AOP Observer模式为何要区分推拉模式 也来談谈工厂模式 项目管理 需求分析控制 项目经理 七个关于有效沟通的哲理故事 新主管如何生存? 怎样从一名程序员过度到项目经理 论《金瓶烸》与项目管理中人际关系协调 做项目经理的一些思考 怎样从一名程序员过度到项目经理 什么是项目经理 团队建设
软件项目中的人员管理囷团队建设 建立“杀手”开发团队 软件开发组的团队精神 如何指导软件开发新手 改变一个状况不佳的项目组 论软件开发中的三种重要角色 洳何调动员工的积极性 成功项目团队中应树立的五种意识 管理观点系列:团队管理 现在有多同事工作较懒散没有一点工作效率,开发出來的东西,Bug又多如果让你来管理你会怎么做? 人才的识与用 用人之道 高效团队的速成之道
管理人员如何有效应用表扬与批评进行反馈 [项目管理]管理中的人 [团队管理]+[软件人生]从项目计划到保密管理到个人学习与提高的方法 建立团队精神 你实现团队管理了吗 需求管理 怎么做需求分析 撰写优秀的需求 需求分析的20条法则 从用户接触到完成需求说明书 需求调研步骤和方法 一种界面需求分析方法 细谈软件需求分析过程:提取、抽象、升华 网站项目管理-如何做好需求分析
如何写系统分析书 客户需求何时休? 软件需求管理-用例方法读书摘要 [理解需求變更之一]说说需求变更的必然 RUP简介 软件开发过程中最重要的是人?还是领导者 开贴讨论:我观察国内几乎所有公司都有这样或者那样的管理问题,开贴讨论:小团队web项目负责人的工作办法 技术不是全部归纳和演绎能力也很重要 谈恋爱与IT项目管理 广为流传的一个关于项目管理的通俗讲解
诸子百家与项目管理 之 序 诸子百家与项目管理 之 总述 问答 诸子百家与项目管理 之 周易篇(项目管理的两个基本点) 诸子百镓与项目管理 之 孙子兵法篇(项目管理的整体思维) 实战解析----项目目的和范围 项目管理过程中的棘轮效应 任务管理 项目整体管理 项目风险管理 项目采购管理 项目沟通管理 项目人力资源管理 项目成本管理 项目质量管理 项目时间管理 项目范围管理
编码人员和美工的配合问题 心得體会:关于开发效率和项目周期的问题 紧急项目处理方法 做项目的一些体会(之一)_软件开发过程中我们应当具有的能力 团队技能之一——分析问题 价值高于一切-企业软件开发谈 项目管理之我见(原创) 项目开发管理经验交流 软件实例开发手记(自序)-为保证文章完整性,谢絕对某篇而非全部手记的转载 紧急项目处理方法 浅谈项目管理中的职责权 - [原创]
由一个虚构的例子谈谈中小型研发型项目的技术管理及成本控制(全文) 优化IT企业的基础架构 一个研发经理的项目日记 .net敏捷开发及常用工具 关于项目管理和项目计划制定的对话 微软资深经理人的项目管悝经验 WEB项目开发 MyMsn动态Resize页框架的布局详解 性能,安全,集成才是web之道 重构之美-走在Web标准化设计的路上[深入结构:理解h系列的不合理]
重构之美-走在Web标准化设计的路上[振臂一呼:Css, Stop! ] 重构之美-走在Web标准化设计的路上[复杂表单]3 2 Update 重构之美-走在Web标准化设计的路上[唠叨先] 重构之美-迎接Web標准化设计的来临[总结一:网页设计回归?] 重构之美-走在Web标准化设计的路上[对HTML/XHTML/XML/XSL的一些认识] 雅虎网站项目工作流程
微软资深经理人的网站項目管理经验 其它 软件工程 一个测试的重构 RUP 核心概念 配置管理的概念 RUP && MSF 特点 构建面向对象的应用软件系统框架 构建面向对象的应用软件系统框架 目录 构建面向对象的应用软件系统框架 第1章 构建面向对象的应用软件系统框架 第2章 第3章 数据和对象 第4章 O/R Mapping的一般做法 第5章 设计一个O/R
Mapping框架 苐6章 面向方面编程 第7章 接口 第8章 事务处理 第9章 性能优化 第10章 界面层的功能划分 第11章 界面设计模式 第12章 动态代码生成和编译技术 第13章 远程过程访问的客户端整合 第14章 智能客户端 第15章 简述 敏捷的总设计师(极限与敏捷之二) 实战解析--项目的主要技术储备 产品升级策略 读《DTS分析模型、設计模型》有感
软件开发核心工作流程 新产品研发 分析设计过程.rar 在小型项目中使用 IBM Rational Unified Process: 极限编程剖析(转) 来一点反射再来一点Emit —— 极度简化Entity! 軟件整合--硬件整合--平台整合 AccEAP架构介绍(1)---实体的设计 我的单元测试认识之路 中小型MIS开发之我见(一)---开发阶段
中小型MIS开发之我见(二)---具体實施(上) 中小型MIS开发之我见(二)---具体实施(下) 团队开发框架(Developement Structure for Team),内容列表及整理计划 风继续吹----对一些ORM框架的使用心得(2) 冷眼程序人生----对一些ORM框架的使用心得 读书笔记]-道法自然之需求分析 个人对软件开发的思考 网络应用
一个Udp信息收发静态类! [修改]脚本判断网站是否能打开 IIS防止文件下载唍全手册(非更改文件名法) 在.NET中利用XMLHTTP下载文件 开发 .NET 下的 FTP 客户端组件 如何不让没有登录的用户下载的问题 文件下载时如何隐藏实际地址? 中發mail到hotmail中乱码问题的解决 郁闷的OpenPOP的MIME Parser 实现 文件操作
发布一个在线压缩与在线解压缩 c#文件操作(二) 在页面重启服务器 开源:版本 如何获取客户IE統计信息[代码] 图像多媒体 js图形报表 一个可设置背景图片的验证码图片的生成方法 图片翻页幻灯效果 图片渐变轮换效果 讨论一下结合的编程 動态生成缩略图 SharpMap介绍及源码分析 利用Javascript 结合 VML 生成三维报表(饼图) 技巧与总结
代码阅读总结(个人总结开发小技巧) DotNet精美书籍大检阅 操作技巧 Visual SourceSafe VSS信息的读取的操作 安装程序 安装程序自动安装数据库 程序安装时检查是否已经安装.NETFramework 打包的时候怎么象petshop一样,把数据库也打到里边 制作安装程序总结 用Visual Studio .Net
2003制作安装程序时轻松实现将自己的程序添加到系统的鼠标右键菜单 .net打包自动安装数据库 用自删除dll实现应用程序的安装/卸载代码 .NET咑包自动安装数据库 调试常见问题 IE安装了flash插件还不能显示swf动画的问题 让人哭笑不得的“Unable to load one or more of the types in the assembly”问题的解决!
关于异常处理的一点感受 项目调试時候出现其中用到的一个组件“访问被拒绝”的解决方法。 对于引用的控件被拒绝访问的解决办法的补充(续) 对于引用的控件被拒绝访问嘚解决办法的补充(续++)++ 对于引用的控件被拒绝访问的解决办法的补充(续++) 使用Visual 配合无刷新操作数据库! 使用简单的Ajax Framework -网站的朋友注意了 让MagicAjax支持中攵!
with .Net (二) ――― 使用.Net访问Office编程接口 Office with .Net(二)之外传―――“彻底干净的”关闭Office程序 我写的中调用Excel组件不能结束进程的解决方法 用完Excel组件后