预防电脑蓝屏应该注意以下几点:定期对重要的注册表文件进行手工备份;尽量避免非正常关机,减少重要文件的丢失;对普通用户而言,只要能正常运行,就不要升级显卡、主板的BIOS和驱动程序;定期检查优化系统文件,运行“系统文件检查器”进行文件丢失检查及版本校对。
◇解决方案:
(1)使用Windows安装光盘进行修复安装
(2)如果还能进入安全模式, 可以\\"开始-->运行\\": sfc /scannow
(3)还可以采用提取文件的方法来解决, 进入\\"故障恢复控制台\\", 使用copy或expand命令从光盘中复制或解压受损的文件. 不过, 蓝屏一般都是驱动程序文件的问题, 所以expand命令会用的都一些, 比如:蓝屏中提示tdi.sys文件, 因为驱动文件一般在i386\\driver压缩包里, 所以使用: expand %CDROM:\\i386\\driver.cab \\f:tdi.sys c:\\winnt\\system\\drivers.(xp为expand %CDROM:\\i386\\driver.cab \\f:tdi.sys c:\\windowns\\system\\drivers)
如果启动时出现这些蓝屏停机码
如果在Windows启动时出现蓝屏, 并出现附表一中的错误信息, 那么多半时硬件出现了问题, 请用硬件厂商提供的诊断工具来判断硬件是否存在问题, 并到其网站查看是否有最新的BIOS或固件更新程序. 如果硬件没有问题, 重装Windows 2K/XP, 若相同问题还是出现, 就只能求助专业的技术支持了.
如果遇到的时附表二中的错误信息, 也只有重装Windows了, 如果不能解决问题, 建议求救专业的技术支持.
1.故障检查信息
***STOP 0x0000001E(0xC0000005,0xFDE38AF9,0x0000001,0x7E8B0EB4)
KMODE_EXCEPTION_NOT_HANDLED ***
其中错误的第一部分是停机码(Stop Code)也就是STOP 0x0000001E, 用于识别已发生错误的类型, 错误第二部分是被括号括起来的四个数字集, 表示随机的开发人员定义的参数(这个参数对于普通用户根本无法理解, 只有驱动程序编写者或者微软操作系统的开发人员才懂). 第三部分是错误名. 信息第一行通常用来识别生产错误的驱动程序或者设备. 这种信息多数很简洁, 但停机码可以作为搜索项在微软知识库和其他技术资料中使用.
2.推荐操作
蓝屏第二部分是推荐用户进行的操作信息. 有时, 推荐的操作仅仅是一般性的建议(比如: 到销售商网站查找BIOS的更新等)有时, 也就是显示一条与当前问题相关的提示. 一般来说, 惟一的建议就是重启.
3.调试端口告诉用户内存转储映像是否写到磁盘商了, 使用内存转储映像可以确定发生问题的性质, 还会告诉用户调试信息是否被传到另一台电脑商, 以及使用了什么端口完成这次通讯. 不过, 这里的信息对于普通用户来说, 没有什么意义.
有时保卫科可以顺利的查到是哪个生产小组的问题, 会在第一部分明确报告是哪个文件犯的错, 但常常它也只能查个大概范围, 而无法明确指明问题所在. 由于工厂全面被迫停止, 只有重新整顿开工, 有时, 那个生产小组会意识到错误 , 不再重犯. 但有时仍然会试图哄抢零件, 于是厂领导不得不重复停工决定(不能启动并显示蓝屏信息, 或在进行相同操作时再次出现蓝屏).
出现蓝屏后的九个常规解决方案
Windows 2K/XP蓝屏信息非常多, 无法在一篇文章中全面讲解, 但他们产生的原因往往集中在不兼容的硬件和驱动程序、有问题的软件、病毒等, 因此首先为大家提供了一些常规的解决方案, 在遇到蓝屏错误时, 应先对照这些方案进行排除.
1.重启
有时只是某个程序或驱动程序一时犯错, 重启后他们会改过自新.(注意:此时参见7.查询停机码)
2.新硬件
首先, 应该检查新硬件是否插牢, 这个被许多人忽视的问题往往会引发许多莫名其妙的故障. 如果确认没有问题, 将其拔下, 然后换个插槽试试, 并安装最新的驱动程序. 同时还应对照微软网站的硬件兼容类别检查一下硬件是否与操作系统兼容. 如果你的硬件没有在表中, 那么就得到硬件厂商网站进行查询, 或者拨打他们的咨询电话.
[color]
Windows XP的硬件兼容列表:http://support.microsoft.com/default.aspx?scid=kbzh-cn314062
Windows 2K的硬件兼容类别:http://winqual.microsoft.com/download/display.asp?FileName=hcl/Win2000HCL.txt
3.新驱动和新服务
如果刚安装完某个硬件的新驱动, 或安装了某个软件, 而它又在系统服务中添加了相应项目(比如:杀毒软件、CPU降温软件、防火墙软件等), 在重启或使用中出现了蓝屏故障, 请到安全模式来卸载或禁用它们.
4.检查病毒
比如冲击波和振荡波等病毒有时会导致Windows蓝屏死机, 因此查杀病毒必不可少. 同时一些木马间谍软件也会引发蓝屏, 所以最好再用相关工具进行扫描检查.
5.检查BIOS和硬件兼容性
对于新装的电脑经常出现蓝屏问题, 应该检查并升级BIOS到最新版本, 同时关闭其中的内存相关项, 比如:缓存和映射. 另外, 还应该对照微软的硬件兼容列表检查自己的硬件. 还有就是, 如果主板BIOS无法支持大容量硬盘也会导致蓝屏, 需要对其进行升级.
QUOTE:
小提示:
BIOS的缓存和映射项
Video BIOS Shadowing (视频BIOS映射)
Shadowing address ranges(映射地址列)
System BIOS Cacheable(系统BIOS缓冲)
Video BIOS Cacheable(视频BIOS缓冲)
Video RAM Cacheable(视频内存缓冲)
6.检查系统日志
在开始-->菜单中输入:EventVwr.msc, 回车出现\\"事件查看器\\", 注意检查其中的\\"系统日志\\"和\\"应用程序日志\\"中表明\\"错误\\"的项.
7.查询停机码
把蓝屏中密密麻麻的E文记下来, 接着到其他电脑中上网, 进入微软帮助与支持网站http://support.microsoft.com, 在左上角的\\"搜索(知识库)\\"中输入停机码, 如果搜索结果没有适合信息, 可以选择\\"英文知识库\\"在搜索一遍. 一般情况下, 会在这里找到有用的解决案例. 另外, 在baidu、Google等搜索引擎中使用蓝屏的停机码或者后面的说明文字为关键词搜索, 往往也会有以外的收获.
8.最后一次正确配置
一般情况下, 蓝屏都出现于更新了硬件驱动或新加硬件并安装其驱动后, 这时Windows 2K/XP提供的\\"最后一次正确配置\\"就是解决蓝屏的快捷方式. 重启系统, 在出现启动菜单时按下F8键就会出现高级启动选项菜单, 接着选择\\"最后一次正确配置\\".
9.安装最新的系统补丁和Service Pack
有些蓝屏是Windows本身存在缺陷造成的, 应此可通过安装最新的系统补丁和Service Pack来解决.
经典蓝屏案意义破解
检查BIOS和硬件兼容性
对于新装的电脑经常出现蓝屏问题, 应该检查并升级BIOS到最新版本, 同时关闭其中的内存相关项, 比如:缓存和映射. 另外, 还应该对照微软的硬件兼容列表检查自己的硬件. 还有就是, 如果主板BIOS无法支持大容量硬盘也会导致蓝屏, 需要对其进行升级.
相信我的回答能令你满意。以上的网址都可以用,不要管他。1.Windows XP有Bug
Windows XP有一个关机故障的Bug,如果你的计算机在关机过程中时常出现关机蓝屏,而且该故障是间歇性的,按下“Ctrl+Alt+Delete”键也毫无反应,那么可以肯定你的系统还没有打上相应的补丁。请下载SP1补丁包打上补丁,一般就可以了。
2.创新声卡的驱动有问题
如果你使用的是创新声卡,并且在关机过程中出现蓝屏,错误码是“0X0A”,那么,请进入设备管理器,将声卡删除,刷新后,手动安装最新的带有数字签名的驱动程序。
3.罗技鼠标、键盘不完善
如果你使用的是罗技的网络键盘,并且安装了Key Commander软件来驱动键盘相应的网络功能,则有可能造成关机变成重启故障。如果你的罗技鼠标的驱动程序是MouseWare8.6,则会造成关机蓝屏故障,你只有卸载该驱动才能解决问题。
关机却不能自动切断电源
在关机过程中,一切正常,但是却停止在“您可以安全地关闭计算机了”却无法自动切断电源,需要手动按主机箱面板上的“Power”键来关机。造成出现该故障的原因一般有以下几个方面:
1. 没有开启电源支持
依次点击“开始→设置→控制面板→电源选项→高能电源管理”,勾选“启用高级电源管理支持”即可。
2.BIOS设置有误
可能是误修改了BIOS中有关电源管理的选项,如果你对BIOS设置比较熟悉,请进入BIOS,试着修改BIOS中有关电源管理的选项。如果你对BIOS不熟悉,那么干脆选择“Load default setup”选项,恢复BIOS到出厂时默认的设置即可。
3.Office XP也惹祸
Office XP当中Ctfmon.exe一直是一个颇有争议的问题。Ctfmon.exe是微软的文本服务文件,只要用户安装了Office XP并且安装了“可选用户输入方法组件,这个文件就会自动调用它,为语音识别、手写识别、键盘以及其它用户输入技术提供文字输入支持。即使我们没有启动Office XP,Ctfmon.exe照样在后台运行。就是它,往往造成了关机故障,你不妨将其卸载试试。
依次点击“开始→设置→控制面板→添加/删除程序”,在目前已安装的程序中选中“Microsoft Office XP Professionain With FrontPage”,点击“更改”按钮,在“维护模式选项”对话框中选择“添加或删除功能”选项,点下一步,弹出“为所有Office应用程序和工具选择安装选项”对话框,展开“Office共享功能”选项,选中“中文可选用户输入方法”选项,在弹出菜单中选择“不安装”,点“更新”按钮即可。
4.APM/NT Legacy Node没有开启
一般情况下APM/NT Legacy Node没有开启可能造成关机却不能自动切断电源。进入设备管理器,点菜单栏中的“查看→显示隐藏的设备”,显示出系统中所有的隐藏设备。在设备列表框中查看有无APM/NT Legacy Node选项。如果你的电脑支持此功能,就会有该选项,双击,在弹出的属性对话框中,点击“启用设备”按钮即可。
windows蓝屏错误
1 0×00000001 不正确的函数。
2 0×00000002 系统找不到指定的档案。
3 0×00000003 系统找不到指定的路径。
4 0×00000004 系统无法开启档案。
5 0×00000005 拒绝存取。
6 0×00000006 无效的代码。
7 0×00000007 储存体控制区块已毁。
8 0×00000008 储存体空间不足,无法处理这个指令。
9 0×00000009 储存体控制区块地址无效。
10 0×0000000A 环境不正确。
11 0×0000000B 尝试加载一个格式错误的程序。
12 0×0000000C 存取码错误。
13 0×0000000D 资料错误。
14 0×0000000E 储存体空间不够,无法完成这项作业。
15 0×0000000F 系统找不到指定的磁盘驱动器。
16 0×00000010 无法移除目录。
16 0×00000010 无法移除目录。
17 0×00000011 系统无法将档案移到 其它的磁盘驱动器。
18 0×00000012 没有任何档案。
19 0×00000013 储存媒体为写保护状态。
20 0×00000014 系统找不到指定的装置。
21 0×00000015 装置尚未就绪。
22 0×00000016 装置无法识别指令。
23 0×00000017 资料错误 (cyclic redundancy check)
24 0×00000018 程序发出一个长度错误的指令。
25 0×00000019 磁盘驱动器在磁盘找不到 持定的扇区或磁道。
26 0×0000001A 指定的磁盘或磁盘无法存取。
27 0×0000001B 磁盘驱动器找不到要求的扇区。
28 0×0000001C 打印机没有纸。
29 0×0000001D 系统无法将资料写入指定的磁盘驱动器。
30 0×0000001E 系统无法读取指定的装置。
31 0×0000001F 连接到系统的某个装置没有作用。
32 0×00000020 The process cannot access the file because it is being used by another process.
33 0×00000021 档案的一部份被锁定, 现在无法存取。
34 0×00000022 磁盘驱动器的磁盘不正确。 请将 %2 (Volume Serial Number: %3) 插入磁盘机%1。
36 0×00000024 开启的分享档案数量太多。
38 0×00000026 到达档案结尾。
39 0×00000027 磁盘已满。
50 0×00000032 不支持这种网络要求。
51 0×00000033 远程计算机无法使用。
52 0×00000034 网络名称重复。
53 0×00000035 网络路径找不到。
54 0×00000036 网络忙碌中。
55 0×00000037 The specified network resource or device is no longer available.
56 0×00000038 The network BIOS command limit has been reached. 57 0×00000039 网络配接卡发生问题。
58 0×0000003A 指定的服务器无法执行要求的作业。
59 0×0000003B 网络发生意外错误。
60 0×0000003C 远程配接卡不兼容。
61 0×0000003D 打印机队列已满。
62 0×0000003E 服务器的空间无法储存等候打印的档案。
63 0×0000003F 等候打印的档案已经删除。
64 0×00000040 指定的网络名称无法使用。
65 0×00000041 拒绝存取网络。
65 0×00000041 拒绝存取网络。
66 0×00000042 网络资源类型错误。
67 0×00000043 网络名称找不到。
68 0×00000044 超过区域计算机网络配接卡的名称限制。
69 0×00000045 超过网络 BIOS 作业阶段的限制。
70 0×00000046 远程服务器已经暂停或者正在起始中。
71 0×00000047 由于联机数目已达上限,此时无法再联机到这台远程计算机。
72 0×00000048 指定的打印机或磁盘装置已经暂停作用。
80 0×00000050 档案已经存在。
82 0×00000052 无法建立目录或档案。
83 0×00000053 INT 24 失败
84 0×00000054 处理这项要求的储存体无法使用。
85 0×00000055 近端装置名称已经在使用中。
86 0×00000056 指定的网络密码错误。
87 0×00000057 参数错误。
88 0×00000058 网络发生资料写入错误。
89 0×00000059 此时系统无法执行其它行程。
100 0×00000064 无法建立其它的系统 semaphore。 101 0×00000065 属于其它行程专用的 semaphore.
102 0×00000066 semaphore 已经设定,而且无法关闭。
103 0×00000067 无法指定 semaphore 。
104 0×00000068 在岔断时间无法要求专用的 semaphore 。
104 0×00000068 在岔断时间无法要求专用的 semaphore 。
105 0×00000069 此 semaphore 先前的拥有权已经结束。
106 0×0000006A 请将磁盘插入 %1。
107 0×0000006B 因为代用的磁盘尚未插入,所以程序已经停止。
108 0×0000006C 磁盘正在使用中或被锁定。
109 0×0000006D Pipe 已经中止。
110 0×0000006E 系统无法开启指定的 装置或档案。
111 0×0000006F 档名太长。
112 0×00000070 磁盘空间不足。
113 0×00000071 没有可用的内部档案标识符。
114 0×00000072 目标内部档案标识符不正确。
117 0×00000075 由应用程序所执行的 IOCTL 呼叫 不正确。
118 0×00000076 写入验证参数值不正确。
119 0×00000077 系统不支持所要求的指令。
120 0×00000078 此项功能仅在 Win32 模式有效。
121 0×00000079 semaphore 超过逾时期间。
122 0×0000007A 传到系统呼叫的资料区域 太小。
123 0×0000007B 文件名、目录名称或储存体卷标语法错误。
124 0×0000007C 系统呼叫层次不正确。
125 0×0000007D 磁盘没有设定卷标。
126 0×0000007E 找不到指定的模块。
127 0×0000007F 找不到指定的程序。
128 0×00000080 没有子行程可供等待。
128 0×00000080 没有子行程可供等待。
129 0×00000081 %1 这个应用程序无法在 Win32 模式下执行。
130 0×00000082 Attempt to use a file handle to an open disk partition for an operation other than raw disk I/O.
131 0×00000083 尝试将档案指针移至档案开头之前。
132 0×00000084 无法在指定的装置或档案,设定档案指针。
133 0×00000085 JOIN 或 SUBST 指令 无法用于 内含事先结合过的磁盘驱动器。
134 0×00000086 尝试在已经结合的磁盘驱动器,使用 JOIN 或 SUBST 指令。
135 0×00000087 尝试在已经替换的磁盘驱动器,使 用 JOIN 或 SUBST 指令。
136 0×00000088 系统尝试删除 未连结过的磁盘驱动器的连结关系。
137 0×00000089 系统尝试删除 未替换过的磁盘驱动器的替换关系。
138 0×0000008A 系统尝试将磁盘驱动器结合到已经结合过之磁盘驱动器的目录。
139 0×0000008B 系统尝试将磁盘驱动器替换成已经替换过之磁盘驱动器的目录。
140 0×0000008C 系统尝试将磁盘驱动器替换成已经替换过之磁盘驱动器的目录。
141 0×000000 系统尝试将磁盘驱动器 SUBST 成已结合的磁盘驱动器 目录。
142 0×0000008E 系统此刻无法执行 JOIN 或 SUBST。
143 0×0000008F 系统无法将磁盘驱动器结合或替换同一磁盘驱动器下目录。
144 0×00000090 这个目录不是根目录的子目录。
145 0×00000091 目录仍有资料。
146 0×00000092 指定的路径已经被替换过。
147 0×00000093 资源不足,无法处理这项 指令。
148 0×00000094 指定的路径这时候无法使用。
148 0×00000094 指定的路径这时候无法使用。
149 0×00000095 尝试要结合或替换的磁盘驱动器目录,是已经替换过的的目标。
150 0×00000096 CONFIG.SYS 文件未指定系统追踪信息,或是追踪功能被取消。
151 0×00000097 指定的 semaphore事件 DosMuxSemWait 数目不正确。
152 0×00000098 DosMuxSemWait 没有执行;设定太多的 semaphore。
153 0×00000099 DosMuxSemWait 清单不正确。
154 0×0000009A 您所输入的储存媒体标 元长度限制。
155 0×0000009B 无法建立其它的执行绪。
156 0×0000009C 接收行程拒绝接受信号。
157 0×0000009D 区段已经被舍弃,无法被锁定。
158 0×0000009E 区段已经解除锁定。
159 0×0000009F 执行绪识别码的地址不正确。
160 0×000000A0 传到 DosExecPgm 的自变量字符串不正确。
161 0×000000A1 指定的路径不正确。
162 0×000000A2 信号等候处理。
164 0×000000A4 系统无法建立执行绪。
167 0×000000A7 无法锁定档案的部份范围。
170 0×000000AA 所要求的资源正在使用中。
173 0×000000AD 取消范围的锁定要求不明显。
174 0×000000AE 档案系统不支持自动变更锁定类型。
180 0×000000B4 系统发现不正确的区段号码。
182 0×000000B6 操作系统无法执行 %1。
182 0×000000B6 操作系统无法执行 %1。
183 0×000000B7 档案已存在,无法建立同一档案。
186 0×000000BA 传送的旗号错误。
187 0×000000BB 指定的系统旗号找不到。
188 0×000000BC 操作系统无法执行 %1。
189 0×000000BD 操作系统无法执行 %1。
190 0×000000BE 操作系统无法执行 %1。
191 0×000000BF 无法在 Win32 模式下执行 %1。
192 0×000000C0 操作系统无法执行 %1。
193 0×000000C1 %1 不是正确的 Win32 应用程序。
194 0×000000C2 操作系统无法执行 %1。
195 0×000000C3 操作系统无法执行 %1。
196 0×000000C4 操作系统无法执行 这个应用程序。
197 0×000000C5 操作系统目前无法执行 这个应用程序。
198 0×000000C6 操作系统无法执行 %1。
199 0×000000C7 操作系统无法执行 这个应用程序。
200 0×000000C8 程序代码的区段不可以大于或等于 64KB。
201 0×000000C9 操作系统无法执行 %1。
202 0×000000CA 操作系统无法执行 %1。
203 0×000000CB 系统找不到输入的环境选项。\r
205 0×000000CD 在指令子目录下,没有任何行程有信号副处理程序。
206 0×000000CE 文件名称或扩展名太长。
207 0×000000CF ring 2 堆栈使用中。
207 0×000000CF ring 2 堆栈使用中。
208 0×000000D0 输入的通用档名字元 * 或 ? 不正确, 或指定太多的通用档名字元。
209 0×000000D1 所传送的信号不正确。
210 0×000000D2 无法设定信号处理程序。
212 0×000000D4 区段被锁定,而且无法重新配置。
214 0×000000D6 附加到此程序或动态连结模块的动态连结模块太多。
215 0×000000D7 Can’t nest calls to LoadModule.
230 0×000000E6 The pipe state is invalid.
231 0×000000E7 所有的 pipe instances 都在忙碌中。
232 0×000000E8 The pipe is being closed.
233 0×000000E9 No process is on the other end of the pipe.
234 0×000000EA 有更多可用的资料。
240 0×000000F0 作业阶段被取消。
254 0×000000FE 指定的延伸属性名称无效。
255 0×000000FF 延伸的属性不一致。
259 0×00000103 没有可用的资料。
266 0×0000010A 无法使用 Copy API。
267 0×0000010B 目录名称错误。
275 0×00000113 延伸属性不适用于缓冲区。
276 0×00000114 在外挂的档案系统上的延伸属性档案已经毁损。
277 0×00000115 延伸属性表格文件满。
278 0×00000116 指定的延伸属性代码无效。
278 0×00000116 指定的延伸属性代码无效。
282 0×0000011A 外挂的这个档案系统不支持延伸属性。
288 0×00000120 意图释放不属于叫用者的 mutex。
298 0×0000012A semaphore 传送次数过多。
299 0×0000012B 只完成 Read/WriteProcessMemory 的部份要求。
317 0×0000013D 系统找不到位于讯息文件 %2 中编号为 0×0000%1 的讯息。
第一章:绪论?内核版本号格式:x.y.zz-www/x为主版本号,y为次版本号,zz为次次版本号,www为发行号/次版本号改变说明内核有重大变革,其偶数为稳定版本,奇数为尚在开发中的版本
第二章:基础?
文件种类:-:txt,二进制/d:目录/l:链接文件(link)/b:区块设备文件/c:字符设备文件/p:管道
目录结构:bin:可执行/boot:开机引导/dev:设备文件/etc:系统配置文件/lib:库文件/mnt:设备挂载点/var:系统日志/
命令:rmdir:删除空目录/find [path] [expression]/touch命令还可以修改指定文件的最近一次访问时间/tar -czvf usr.tar.gz path/tar –zxvf usr.tar.gz/tar –cjvf usr.tar.bz2 path/tar –jxvf usr.tar.bz2
gcc:预处理:-g/I在头文件搜索路径中添加目录,L在库文件搜索路径中
gdb:设置断点:b/查看断点信息:info
Makefile:make –f other_makefile/<:第一个依赖文件的名称/@:目标文件的完整名称/^:所有不重复的依赖文件/+:所有依赖文件(可能重复)
第三章:文件IO
read:read(fd, temp, size)/读fd中长度为size的值到temp/返回0表示file为NULL
write:write(fd, buf, buf_size)/写长度为buf_size的buf内容到fd中
lseek:lseek(fd, offset, SEEK_SET)/从文件开头向后增加offset个位移量
unlink:从文件系统中删除一个名字
open1:int open(const char * pathname, int flags, mode_t mode)/flags为读写方式/mode为权限设置/O_EXCL:测试文件是否存在/O_TRUNC:若存在同名文件则删除之并新建
open2:注意O_NONBLOCK
mmap.1:void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offsize)
mmap.2:mmap(start_addr, flength, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0)
fcntl:上锁/int fcntl(int fd, int cmd, struct flock * lock)/对谁;做什么;设置所做内容
select:fd_max+1,回传读状况,回传写状况,回传异常,select等待的时间/NULL为永远等待/0为从不等待/凡需某状况则用之,反则(fd_set *)NULL之
FD_*那几个函数……
一般出错则返回-1
第四章:文件与目录
硬链接与符号链接?
chdir改变目录
0:in/1:out/2:err
第五章:内存管理
可执行文件存储时:代码区、数据区和未初始化区
栈:by编译器,向低址扩展,连续,效率高/堆:by程序员
/etc/syslog.conf,系统log记录文件/优先级为-20时最高
第六章:进程和信号
程序代码、数据、变量、文件描述符和环境/init的pid为1
execl族:int execl(const char * path, const char * arg, ....)/path即可执行文件的路径,一般为./最后一个参数以NULL结束
waitpid:waitpid(pid_t pid,int * status,int options)/option:一般用WNOHANG,没有已经结束的子进程则马上返回,不等待
kill:int kill(pid_t pid,int sig)/发送信号sig给pid
void (*signal(int signum, void(* handler)(int)))(int)/第一个参数被满足时,执行handler/第一个参数常用:SIG_IGN:忽略信号/SIG_DFL:恢复默认信号
第七章:线程
sem_init(sem_t *sem, int pshared, unsigned int value)/pshared为0/value即初始值
第八章:管道
1:write/0:read
第九章:信号量、共享内存和消息队列
临界资源:操作系统中只允许一个进程访问的资源/临界区:访问临界资源的那段代码
信号量:建立联系(semget),然后初始化,PV操作,最后destroy
共享内存没有提供同步机制
第十章:套接字
UDP:无连接协议,无主客端的区分/实时性
TCP:字节流/数据可靠性/网络可靠性
数据报:SOCK_STREAM/SOCK_DGRAM
其它
管道一章的both_pipe即父子进程间的全双工管道通讯
关系到信号和互斥的服务器-客户端程序
线程一章的class的multi_thread文件夹下的thread8.c
int main(void)
{
int data_processed
int file_pipes_1[2]
int file_pipes_2[2]
char buffer[BUFSIZ + 1]
const char some_data[] = "123"
const char ch2p[] = "this is the string from child to the parent!"
const char p2ch[] = "this is the string from parent to the child!"
pid_t fork_result
memset(buffer,'\0',sizeof(buffer))
if(pipe(file_pipes_1) == 0){
if(pipe(file_pipes_2) == 0){
fork_result = fork()
switch(fork_result){
case -1:
perror("fork error")
exit(EXIT_FAILURE)
case 0://child
close(file_pipes_1[1])
close(file_pipes_2[0])
printf("in the child!\n")
read(file_pipes_1[0],buffer, BUFSIZ)
printf("in the child, read_result is \"%s\"\n",buffer)
write(file_pipes_2[1],ch2p, sizeof(ch2p))
printf("in the child, write_result is \"%s\"\n",ch2p)
exit(EXIT_SUCCESS)
default://parent
close(file_pipes_1[0])
close(file_pipes_2[1])
printf("in the parent!\n")
write(file_pipes_1[1], p2ch, sizeof(p2ch))
printf("in the parent, write_result is \"%s\"\n",p2ch)
read(file_pipes_2[0],buffer, BUFSIZ)
printf("in the parent, read_result is \"%s\"\n",buffer)
exit(EXIT_SUCCESS)
}
}
}
}
#ifndef DBG
#define DBG
#endif
#undef DBG
#ifdef DBG
#define PRINTF(fmt, args...) printf("file->%s line->%d: " \
fmt, __FILE__, __LINE__, ##args)
#else
#define PRINTF(fmt, args...) do{}while(0)
#endif
int main(void)
{
PRINTF("%s\n", "hello!")
fprintf(stdout, "hello hust!\n")
return 0
}
#define N 5
#define MAX 5
int nput = 0
char buf[MAX][50]
char *buffer = "abcdefghijklmnopqrstuvwxyz0123456789"
char buf_r[100]
sem_t mutex,full,avail
void *productor(void *arg)
void *consumer(void *arg)
int i = 0
int main(int argc, char **argv)
{
int cnt = -1
int ret
int nput = 0
pthread_t id_produce[10]
pthread_t id_consume
ret = sem_init(&mutex, 0, 1)
ret = sem_init(&avail, 0, N)
ret = sem_init(&full, 0, 0)
for(cnt = 0cnt <6cnt ++ ){
//pthread_create(&id_produce[cnt], NULL, (void *)productor, &cnt)
pthread_create(&id_produce[cnt], NULL, (void *)productor, (void *)cnt)
}
pthread_create(&id_consume, NULL, (void *)consumer, NULL)
for(cnt = 0cnt <6cnt ++){
pthread_join(id_produce[cnt], NULL)
}
pthread_join(id_consume,NULL)
sem_destroy(&mutex)
sem_destroy(&avail)
sem_destroy(&full)
exit(EXIT_SUCCESS)
}
void *productor(void *arg)
{
while(1){
sem_wait(&avail)
sem_wait(&mutex)
if(nput >= MAX * 3){
sem_post(&avail)
//sem_post(&full)
sem_post(&mutex)
return NULL
}
sscanf(buffer + nput, "%s", buf[nput % MAX])
//printf("write[%d] \"%s\" to the buffer[%d]\n", (*(int*)arg), buf[nput % MAX],nput % MAX)
printf("write[%d] \"%s\" to the buffer[%d]\n", (int)arg, buf[nput % MAX],nput % MAX)
nput ++
printf("nput = %d\n", nput)
sem_post(&mutex)
sem_post(&full)
}
return NULL
}
void *consumer(void *arg)
{
int nolock = 0
int ret, nread, i
for(i = 0 i <MAX * 3i++)
{
sem_wait(&full)
sem_wait(&mutex)
memset(buf_r, 0, sizeof(buf_r))
strncpy(buf_r, buf[i % MAX], sizeof(buf[i % MAX]))
printf("read \"%s\" from the buffer[%d]\n\n",buf_r, i % MAX)
sem_post(&mutex)
sem_post(&avail)
//sleep(1)
}
return NULL
}
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)