<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/feedsky0.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.casparant.com" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/CasparAnt" type="application/rss+xml"></fs:self_link><lastBuildDate>Sun, 16 Nov 2008 10:11:51 GMT</lastBuildDate><title>Caspar Ant</title><description>Linux, Open Source, Software Engineering, Programming.</description><image><url>http://www.feedsky.com/feed/CasparAnt/sc/gif</url><title>Caspar Ant</title><link>http://www.casparant.com</link></image><link>http://www.casparant.com</link><language>en</language><pubDate>Sun, 16 Nov 2008 12:27:37 GMT</pubDate><item><title>Python Web操作MySQL乱码问题的解决</title><link>http://www.casparant.com/char-confusion-in-mysql-under-python-web.html</link><content:encoded>&lt;div id=&quot;lw_context_ads&quot;&gt;&lt;p class='fp'&gt;乱码，身为CJK语言国度的程序员永恒的主题……&lt;/p&gt;
&lt;p&gt;乱码，在stardict里面查了一下翻译，居然出来这么一长串：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;characters changed to be irrecognizable because different coder or other reasons&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;不管怎么说，这次是又碰上乱码了。&lt;/p&gt;
&lt;p&gt;症状是这样的，写了几个psp文件，内容大概是通过POST方法从表单获取数据，写入数据库然后另一个页面调用数据库内容显示。结果在写完之后调用显示页面，提示错误：&lt;code&gt;unicodeDecodeError: 'ascii' codec can't decode byte&lt;/code&gt;，看来是因为我数据库里的字段用了中文，显示不出来，然后在&lt;a href=&quot;http://www.casparant.com/tag/mysql&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 mysql 下的日志&quot;&gt;MySQL&lt;/a&gt;里面SELECT * 了一下，发现含中文的内容都是???字样的乱码(以前怎么就没注意捏……）。&lt;/p&gt;
&lt;p&gt;上网搜，发现了这个网页：&lt;a href=&quot;http://blog.csdn.net/foyuan/archive/2007/07/27/1711100.aspx&quot;&gt;http://blog.csdn.net/foyuan/archive/2007/07/27/1711100.aspx&lt;/a&gt;，文中提示了四个步骤确保乱码消失。&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-199&quot;&gt;&lt;/span&gt;因为我写的是PSP页面，不是纯粹的&lt;a href=&quot;http://www.casparant.com/tag/python&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 python 下的日志&quot;&gt;python&lt;/a&gt;，似乎不能用#-*- coding -*-来指定编码，但是参照里面提示的两个步骤，我最后也成功解决了乱码问题：&lt;/p&gt;
&lt;p&gt;1. 解决&lt;a href=&quot;http://www.casparant.com/tag/mysql&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 mysql 下的日志&quot;&gt;MySQL&lt;/a&gt;显示乱码，修改&lt;code&gt;/etc/&lt;a href=&quot;http://www.casparant.com/tag/mysql&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 mysql 下的日志&quot;&gt;mysql&lt;/a&gt;/my.cnf&lt;/code&gt;文件，分别在&lt;code&gt;[client]、[mysqld]&lt;/code&gt;后指定编码：&lt;code&gt;default-character-set = utf8&lt;/code&gt;，重启&lt;a href=&quot;http://www.casparant.com/tag/mysql&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 mysql 下的日志&quot;&gt;mysql&lt;/a&gt;服务。&lt;/p&gt;
&lt;p&gt;2. 解决PSP页面不能解析Unicode字符，在&lt;a href=&quot;http://www.casparant.com/tag/python&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 python 下的日志&quot;&gt;python&lt;/a&gt;语法块内，导入sys包，然后指定编码：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;python python&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #dc143c;&quot;&gt;sys&lt;/span&gt;
...
&amp;nbsp;
&lt;span style=&quot;color: #008000;&quot;&gt;reload&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #dc143c;&quot;&gt;sys&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #dc143c;&quot;&gt;sys&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;setdefaultencoding&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'utf-8'&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;这样就搞定了，等我后续看看有其他什么问题没……&lt;/p&gt;
&lt;/p&gt;&lt;/div&gt;

	标签：&lt;a href=&quot;http://www.casparant.com/tag/charset&quot; title=&quot;charset&quot; rel=&quot;tag&quot;&gt;charset&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/mysql&quot; title=&quot;mysql&quot; rel=&quot;tag&quot;&gt;mysql&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/psp&quot; title=&quot;psp&quot; rel=&quot;tag&quot;&gt;psp&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/python&quot; title=&quot;python&quot; rel=&quot;tag&quot;&gt;python&lt;/a&gt;&lt;br /&gt;

	&lt;h2&gt;Related Posts&lt;/h2&gt;
	&lt;ul class=&quot;st-related-posts&quot;&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/some-acquires.html&quot; title=&quot;两个收购，N个收购 (2008-01-17)&quot;&gt;两个收购，N个收购&lt;/a&gt; (1)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/modpython-configuration-under-ubuntu-804.html&quot; title=&quot;[Ubuntu配置系列之七]Ubuntu 8.04 配置 mod_python (2008-10-19)&quot;&gt;[Ubuntu配置系列之七]Ubuntu 8.04 配置 mod_python&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/ipmsg-problems.html&quot; title=&quot;Linux下飞鸽传书的两个问题的解决 (2008-03-12)&quot;&gt;Linux下飞鸽传书的两个问题的解决&lt;/a&gt; (0)&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/CasparAnt/bee23d22c3b59bb3cdd97d46c3ff51e2&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/CasparAnt/bee23d22c3b59bb3cdd97d46c3ff51e2/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;&lt;br /&gt;&lt;!-- Feedsky flare --&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=c907074bb28c8f8c3cf922256567a30a&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=c907074bb28c8f8c3cf922256567a30a&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=b80ecfe24f513ed62f903665d8974677&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=b80ecfe24f513ed62f903665d8974677&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=1182b6b41c678bf43e9563b03ce78bff&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=1182b6b41c678bf43e9563b03ce78bff&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=97b9f353bb7cafe83e69d95f5b2f5cdb&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=97b9f353bb7cafe83e69d95f5b2f5cdb&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;!-- /Feedsky flare --&gt;</content:encoded><wfw:commentRss>http://www.casparant.com/char-confusion-in-mysql-under-python-web.html/feed</wfw:commentRss><description>乱码，身为CJK语言国度的程序员永恒的主题……
乱码，在stardict里面查了一下翻译，居然出来这么一长串：
characters changed to be irrecognizable because different coder or other reasons
不管怎么说，这次是又碰上乱码了。
症状是这样的，写了几个psp文件，内容大概是通过POST方法从表单获取数据，写入数据库然后另一个页面调用数据库内容显示。结果在写完之后调用显示页面，提示错误：unicodeDecodeError: 'ascii' codec can't decode byte，看来是因为我数据库里的字段用了中文，显示不出来，然后在MySQL里面SELECT * 了一下，发现含中文的内容都是???字样的乱码(以前怎么就没注意捏……）。
上网搜，发现了这个网页：http://blog.csdn.net/foyuan/archive/2007/07/27/1711100.aspx，文中提示了四个步骤确保乱码消失。
因为我写的是PSP页面，不是纯粹的python，似乎不能用#-*- coding -*-来指定编码，但是参照里面提示的两个步骤，我最后也成功解决了乱码问题：
1. 解决MySQL显示乱码，修改/etc/mysql/my.cnf文件，分...&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/CasparAnt/bee23d22c3b59bb3cdd97d46c3ff51e2&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/CasparAnt/bee23d22c3b59bb3cdd97d46c3ff51e2/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;&lt;br /&gt;&lt;!-- Feedsky flare --&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=c907074bb28c8f8c3cf922256567a30a&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=c907074bb28c8f8c3cf922256567a30a&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=b80ecfe24f513ed62f903665d8974677&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=b80ecfe24f513ed62f903665d8974677&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=1182b6b41c678bf43e9563b03ce78bff&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=1182b6b41c678bf43e9563b03ce78bff&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=97b9f353bb7cafe83e69d95f5b2f5cdb&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=97b9f353bb7cafe83e69d95f5b2f5cdb&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;!-- /Feedsky flare --&gt;</description><category>charset</category><category>python</category><category>mysql</category><category>psp</category><category>Web Tech</category><pubDate>Sun, 16 Nov 2008 18:11:51 +0800</pubDate><author>Ant</author><comments>http://www.casparant.com/char-confusion-in-mysql-under-python-web.html#comments</comments><guid isPermaLink="false">http://www.casparant.com/?p=199</guid><dc:creator>Ant</dc:creator><fs:srclink>http://www.casparant.com/char-confusion-in-mysql-under-python-web.html</fs:srclink><fs:srcfeed>http://www.casparant.com/feed</fs:srcfeed><fs:itemid>feedsky/CasparAnt/~6986320/138262031/5070230</fs:itemid></item><item><title>Linux 下使用 C 系统调用函数解决抽烟者问题</title><link>http://www.casparant.com/using-c-system-call-to-solve-smoker-problem-under-linux.html</link><content:encoded>&lt;div id=&quot;lw_context_ads&quot;&gt;&lt;p class='fp'&gt;问题描述:The Cigarette-Smokers Problem. Consider a system with three smoker processes and one agent process. Each smoker continuously rolls a cigarette and then smokes it. But to roll and smoke a cigarette, the smoker needs three ingredients: tobacco, paper, and matches. One of the smoker processes has paper, another has tobacco, and the third has matches. The agent has an infinite supply of all three materials. The agent places two of the ingredients on the table. The smoker who has the remaining ingredient then makes and smokes a cigarette, signaling the agent on completion. The agent then puts out another two of the three ingredients, and the cycle repeats.&lt;/p&gt;
&lt;p&gt;问题分析:通过问题描述,可以构建出一个 4 进程的系统,其中 3 个进程为 smoker 程序的实例,另一个是 agent 程序的实例。首先,Agent 执行提供材料的操作(原则上来说,抽烟者先就座等待也是可行的,代码上也易于实现,但是我编写了一段代码发现很累赘,这作为一个需要改进的部分,暂时在代码中做 TODO 标记),然后执行对 Smoker_i的 V 操作唤醒 Smoker_i,其信号量增 1,i 的值由 Agent 随机确定。接着,Agent 开始等待,进程切换到Smoker_i,Smoker_i 执行 P 操作,信号量减为 0,开始获取材料,卷烟,抽烟操作。抽完烟后 Smoker_i执行 V 操作,通知 Agent,然后 Smoker_i 循环至开头,开始等待,进程切换回 Agent。Agent 也开始循环,如此周期往复。采用同步机制的 PV 操作伪码如下:&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-192&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote&gt;
Initial semaphores:&lt;br /&gt;
Agent: 0&lt;br /&gt;
Smoker_i: 0 (i = 0, 1, 2)&lt;/p&gt;
&lt;p&gt;Agent{&lt;br /&gt;
loop:&lt;br /&gt;
    Offer ingredients;&lt;br /&gt;
    V(Smoker_i);&lt;br /&gt;
    P(Agent);&lt;br /&gt;
    GOTO loop;&lt;br /&gt;
}&lt;br /&gt;
Smoker_i{&lt;br /&gt;
loop:&lt;br /&gt;
    P(Smoker_i);&lt;br /&gt;
    Get ingredients, roll and smoke;&lt;br /&gt;
    V(Agent);&lt;br /&gt;
    GOTO loop;&lt;br /&gt;
}//i = 0, 1, 2&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;技术细节:&lt;/p&gt;
&lt;p&gt;1. &lt;a href=&quot;http://www.casparant.com/tag/linux&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 Linux 下的日志&quot;&gt;Linux&lt;/a&gt; 系统调用函数 semget(),semctl(),semop()&lt;/p&gt;
&lt;p&gt;1.1.   semget()函数原型:int semget(key_t key,int nsems,int semflg);&lt;/p&gt;
&lt;p&gt;这个函数用于创建一个信号量集,创建成功后在操作系统中的 Semaphore Array 中新建一条记录。第一个参数为 Semaphore Array 记录中的 key 值,用于不同进程间识别同一个信号量;第二个参数为信号量集中的信号量个数,如果为 0 则为打开现有的信号量集;第三个参数为信号量创建的操作类型和访问权限。&lt;/p&gt;
&lt;p&gt;1.2. semctl()函数原型:int semctl(int semid,int semnum,int cmd,union semun arg);&lt;/p&gt;
&lt;p&gt;这个函数用于控制信号量集中的每个信号量,具体操作由第三个参数 cmd 决定。&lt;/p&gt;
&lt;p&gt;1.3. semop()函数原型:int semop(int semid,struct sembuf*sops,unsign ednsops);&lt;/p&gt;
&lt;p&gt;这个函数用于操作信号量,通过对第二个参数结构体中的内容进行修改,可以封装成 PV 操作。&lt;/p&gt;
&lt;p&gt;2. ipcs, ipcrm 命令&lt;/p&gt;
&lt;p&gt;由于信号量是在操作系统中的共享区域中,所以可以使用系统命令查看和删除这些信号量集。ipcrm -S KEY 命令可以删除键值为 KEY 的信号量,ipcs 命令可以查看信号量列表(当然其中还有其他 IPC 列表)。&lt;/p&gt;
&lt;p&gt;代码：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;cpp cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*
 * File: PV.h
 * Author: Caspar Zhang
 */&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#ifndef _PV_H&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#define _PV_H&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #339900;&quot;&gt;#define SEM_KEY 0x12345678&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #339900;&quot;&gt;#define ERR_AND_EXIT(arg) do { \&lt;/span&gt;
		&lt;span style=&quot;color: #0000dd;&quot;&gt;perror&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;arg&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;; \
		&lt;span style=&quot;color: #0000dd;&quot;&gt;exit&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;; \
	&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; P&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; semid, &lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; sem_index&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; V&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; semid, &lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; sem_index&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span style=&quot;color: #339900;&quot;&gt;#endif /* _PV_H */&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;cpp cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*
 * File: PV.c
 * Author: Caspar Zhang
 */&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;quot;PV.h&amp;quot;&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;unistd.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;sys/sem.h&amp;gt;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; P&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; semid, &lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; sem_index&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;struct&lt;/span&gt; sembuf buf;
&amp;nbsp;
	buf.&lt;span style=&quot;color: #007788;&quot;&gt;sem_num&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; sem_index;
	buf.&lt;span style=&quot;color: #007788;&quot;&gt;sem_op&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;;
	buf.&lt;span style=&quot;color: #007788;&quot;&gt;sem_flg&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; SEM_UNDO;
&amp;nbsp;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;semop&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;semid, &lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;buf, &lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
		&lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;;
&amp;nbsp;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; V&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; semid, &lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; sem_index&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;struct&lt;/span&gt; sembuf buf;
&amp;nbsp;
	buf.&lt;span style=&quot;color: #007788;&quot;&gt;sem_num&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; sem_index;
	buf.&lt;span style=&quot;color: #007788;&quot;&gt;sem_op&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;;
	buf.&lt;span style=&quot;color: #007788;&quot;&gt;sem_flg&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; SEM_UNDO;
&amp;nbsp;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;semop&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;semid, &lt;span style=&quot;color: #000040;&quot;&gt;&amp;amp;&lt;/span&gt;buf, &lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
		&lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;;
&amp;nbsp;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;cpp cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*
 * File: Agent.c
 * Author: Caspar Zhang
 */&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;unistd.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;time.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;sys/sem.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;quot;PV.h&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; main&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; argc, &lt;span style=&quot;color: #0000ff;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;argv&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
	&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*
	 * 0 - Paper and matches
	 * 1 - Matches and tobacco
	 * 2 - Tobacco and paper
	 */&lt;/span&gt;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;ingredient&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
		&lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;Paper and matches&amp;quot;&lt;/span&gt;, 
		&lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;Matches and tobacco&amp;quot;&lt;/span&gt;,
		&lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;Tobacco and paper&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; ingred_type;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; semid, i;
&amp;nbsp;
	&lt;span style=&quot;color: #0000dd;&quot;&gt;srand&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;unsigned&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;time&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;NULL&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
	&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* Puts out the Agent's information */&lt;/span&gt;
	&lt;span style=&quot;color: #0000dd;&quot;&gt;fprintf&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;stdout&lt;/span&gt;, &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;I'm the Agent.&lt;span style=&quot;color: #666666; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
	&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*
	 * Create a new semaphore set which has 4 semaphores in it.
	 * The first 3 semaphores are the Smokers' state,
	 * the last one is the Agent's state
	 */&lt;/span&gt;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;semid &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; semget&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;SEM_KEY, &lt;span style=&quot;color: #0000dd;&quot;&gt;4&lt;/span&gt;, IPC_CREAT|&lt;span style=&quot;color: #208080;&quot;&gt;0660&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
		ERR_AND_EXIT&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;semget&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;i &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;; i &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;4&lt;/span&gt;; &lt;span style=&quot;color: #000040;&quot;&gt;++&lt;/span&gt;i&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
		&lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;semctl&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;semid, i, SETVAL, &lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
			ERR_AND_EXIT&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;semctl&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
	&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*
	 * The procedures are shown in below:
	 * 1. Offer Ingredients
	 * 2. V(Smoker_i)
	 * 3. P(Agent)
	 * 4. Go to 1 and repeat
	 */&lt;/span&gt;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
	&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
		&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* Offer the ingredients randomly*/&lt;/span&gt;
		ingred_type &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;rand&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;%&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;3&lt;/span&gt;;
		&lt;span style=&quot;color: #0000dd;&quot;&gt;fprintf&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;stdout&lt;/span&gt;, &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;Agent%d: I offered %s, waiting for the smoker.&lt;span style=&quot;color: #666666; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;,
				ingred_type, ingredient&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#91;&lt;/span&gt;ingred_type&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
		sleep&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
		&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*  Wake up the specified smoker */&lt;/span&gt;
		&lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;V&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;semid, ingred_type&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; ERR_AND_EXIT&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;V failed&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
		&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* Wait for smoker to roll and smoke */&lt;/span&gt;
		&lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;P&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;semid, &lt;span style=&quot;color: #0000dd;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; ERR_AND_EXIT&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;P failed&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
	&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;


&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;cpp cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*
 * File: Smoker.c
 * Author: Caspar Zhang
 */&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;lt;sys/sem.h&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #339900;&quot;&gt;#include &amp;quot;PV.h&amp;quot;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; main&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; argc, &lt;span style=&quot;color: #0000ff;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;argv&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
	&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*
	 * 0 - Tobacco Smoker
	 * 1 - Paper Smoker
	 * 2 - Matches Smoker
	 */&lt;/span&gt;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;char&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;ingredient&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;Tobacco&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;Paper&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;Matches&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; smoker &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; argv&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;'0'&lt;/span&gt;;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; semid;
&amp;nbsp;
	&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* Puts out the Smoker's information */&lt;/span&gt;
	&lt;span style=&quot;color: #0000dd;&quot;&gt;fprintf&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;stdout&lt;/span&gt;, &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;I'm a smoker. I have %s&lt;span style=&quot;color: #666666; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;, ingredient&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#91;&lt;/span&gt;smoker&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
	&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* Get the existed semaphore set */&lt;/span&gt;
	&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* TODO How to create semaphores if smoker process executed first? */&lt;/span&gt;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;semid &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; semget&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;SEM_KEY, &lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
		ERR_AND_EXIT&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;semget&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;semctl&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;semid, smoker, GETVAL, &lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
		ERR_AND_EXIT&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;semctl&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
	&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/*
	 * The procedures are shown in below:
	 * 1. P(Smoker_i)
	 * 2. Get Ingredients, Roll and Smoke
	 * 3. V(Agent)
	 * 4. Go to 1 and repeat
	 */&lt;/span&gt;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;
	&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;
		&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* Wait for the Agent*/&lt;/span&gt;
		&lt;span style=&quot;color: #0000dd;&quot;&gt;fprintf&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;stdout&lt;/span&gt;, &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;%s: I'm waiting for the agent.&lt;span style=&quot;color: #666666; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;, ingredient&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#91;&lt;/span&gt;smoker&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
		sleep&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
		&lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;P&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;semid, smoker&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; ERR_AND_EXIT&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;P failed&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
		&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* Roll and smoke */&lt;/span&gt;
		&lt;span style=&quot;color: #0000dd;&quot;&gt;fprintf&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;stdout&lt;/span&gt;, &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;%s: I get the ingredients, I'm rolling and smoking now.&lt;span style=&quot;color: #666666; font-weight: bold;&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;, 
				ingredient&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#91;&lt;/span&gt;smoker&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
		sleep&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
		&lt;span style=&quot;color: #ff0000; font-style: italic;&quot;&gt;/* Wake up Agent */&lt;/span&gt;
		&lt;span style=&quot;color: #0000ff;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;V&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;semid, &lt;span style=&quot;color: #0000dd;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; ERR_AND_EXIT&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;V failed&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;
	&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
	&lt;span style=&quot;color: #0000ff;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#800080;&quot;&gt;0&lt;/span&gt;;
&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;顺便附一段用&lt;a href=&quot;http://www.casparant.com/tag/java&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 java 下的日志&quot;&gt;Java&lt;/a&gt;多线程实现的抽烟者问题解决代码，用Semaphore这个类实现的。&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;java java&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #006699;&quot;&gt;java.util.Random&lt;/span&gt;;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #006699;&quot;&gt;java.util.concurrent.Semaphore&lt;/span&gt;;
&amp;nbsp;
&lt;span style=&quot;color: #008000; font-style: italic; font-weight: bold;&quot;&gt;/**
 * @author caspar
 *
 */&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; AgentSmokerProblem 
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
	&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;/* Create 4 semaphores, the first is for agent and the rest are for smokers */&lt;/span&gt;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;static&lt;/span&gt; Semaphore sem_agent;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;static&lt;/span&gt; Semaphore&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; sem_smoker &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; Semaphore&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;;
&amp;nbsp;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;void&lt;/span&gt; main&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; args&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; 
	&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
		&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;/* Initialize the semaphores to 0 */&lt;/span&gt;
		sem_agent &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; Semaphore&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;0&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
		sem_smoker&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;0&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; Semaphore&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;0&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
		sem_smoker&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; Semaphore&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;0&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
		sem_smoker&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; Semaphore&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;0&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
		&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;/* Create agent and smokers */&lt;/span&gt;
		Agent agent &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; Agent&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
		Smoker&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; smoker &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; Smoker&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;;
		smoker&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;0&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; Smoker&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;0&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
		smoker&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; Smoker&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
		smoker&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; Smoker&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
		&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;/* Start the threads */&lt;/span&gt;
		agent.&lt;span style=&quot;color: #006633;&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
		smoker&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;0&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
		smoker&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
		smoker&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
	&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; Agent &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;Thread&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; Agent&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;
	&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
		&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;Agent&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
	&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;void&lt;/span&gt; run&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;
	&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
		&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; smoker_type &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;tobacco&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;paper&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;matches&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;;
		&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; ingre_type &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;paper and matches&amp;quot;&lt;/span&gt;,	&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;matches and tobacco&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;tobacco and paper&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;;
&amp;nbsp;
		&lt;span style=&quot;color: #003399;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;Agent is ready...&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
		&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;
		&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;			
			&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;/* Agent running, offering ingredients */&lt;/span&gt;
			&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;int&lt;/span&gt; smoker_num &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;Random&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;nextInt&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
			&lt;span style=&quot;color: #003399;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;Agent: I offer &amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; ingre_type&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;smoker_num&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; 
					&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;, now waiting for the smoker who has &amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; smoker_type&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;smoker_num&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;			
			&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
				sleep&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;2000&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
			&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;InterruptedException&lt;/span&gt; e1&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
				e1.&lt;span style=&quot;color: #006633;&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
			&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
			&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;/* Call the corresponding smoker */&lt;/span&gt;
			AgentSmokerProblem.&lt;span style=&quot;color: #006633;&quot;&gt;sem_smoker&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;smoker_num&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;release&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
			&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;/* Wait for the smoker */&lt;/span&gt;
			&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;try&lt;/span&gt;	&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
				AgentSmokerProblem.&lt;span style=&quot;color: #006633;&quot;&gt;sem_agent&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;acquire&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
			&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;Exception&lt;/span&gt; e&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
				e.&lt;span style=&quot;color: #006633;&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
			&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
		&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; Smoker &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;extends&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;Thread&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;int&lt;/span&gt; smoker_num;
&amp;nbsp;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; Smoker&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;int&lt;/span&gt; smoker_num&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;
	&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
		&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;Smoker &amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; smoker_num&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
		&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;smoker_num&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; smoker_num;
	&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;void&lt;/span&gt; run&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;
	&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
		&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; smoker_type &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;tobacco&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;paper&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;matches&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;;
		&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; ingre_type &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;paper and matches&amp;quot;&lt;/span&gt;,	&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;matches and tobacco&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;tobacco and paper&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;;
&amp;nbsp;
		&lt;span style=&quot;color: #003399;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;The smoker has &amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; smoker_type&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;smoker_num&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot; is ready...&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
		&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;
		&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
			&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;/* Smoker is waiting for the Agent*/&lt;/span&gt;
			&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
				AgentSmokerProblem.&lt;span style=&quot;color: #006633;&quot;&gt;sem_smoker&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;smoker_num&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;acquire&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
			&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;InterruptedException&lt;/span&gt; e1&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
				e1.&lt;span style=&quot;color: #006633;&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
			&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
			&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;/* Smoker get ingredients, roll and smoke*/&lt;/span&gt;
			&lt;span style=&quot;color: #003399;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;The smoker has &amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; smoker_type&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;smoker_num&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;: I get the &amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; 
					ingre_type&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;smoker_num&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;, Let me roll a cigarette and smoke.&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
			&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
				sleep&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;2000&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
			&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;InterruptedException&lt;/span&gt; e&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
				e.&lt;span style=&quot;color: #006633;&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
			&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
			&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;/* Call agent */&lt;/span&gt;
			AgentSmokerProblem.&lt;span style=&quot;color: #006633;&quot;&gt;sem_agent&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;release&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
			&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;/* Smoker is waiting*/&lt;/span&gt;
			&lt;span style=&quot;color: #003399;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;The smoker has &amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; smoker_type&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;smoker_num&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; 
					&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;: I finish smoking, now waiting for the agent.&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
			&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;try&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
				sleep&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;2000&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
			&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;catch&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;InterruptedException&lt;/span&gt; e1&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
				e1.&lt;span style=&quot;color: #006633;&quot;&gt;printStackTrace&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;;
			&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
		&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
	&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;/p&gt;&lt;/div&gt;

	标签：&lt;a href=&quot;http://www.casparant.com/tag/c&quot; title=&quot;C&quot; rel=&quot;tag&quot;&gt;C&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/cigarette-smoker&quot; title=&quot;cigarette smoker&quot; rel=&quot;tag&quot;&gt;cigarette smoker&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/java&quot; title=&quot;java&quot; rel=&quot;tag&quot;&gt;java&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/operating-system&quot; title=&quot;operating system&quot; rel=&quot;tag&quot;&gt;operating system&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/semaphore&quot; title=&quot;semaphore&quot; rel=&quot;tag&quot;&gt;semaphore&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/smoker&quot; title=&quot;smoker&quot; rel=&quot;tag&quot;&gt;smoker&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/syscall&quot; title=&quot;syscall&quot; rel=&quot;tag&quot;&gt;syscall&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/system-call&quot; title=&quot;system call&quot; rel=&quot;tag&quot;&gt;system call&lt;/a&gt;&lt;br /&gt;

	&lt;h2&gt;Related Posts&lt;/h2&gt;
	&lt;ul class=&quot;st-related-posts&quot;&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/java-tips.html&quot; title=&quot;纯发泄，Java考点 (2008-06-10)&quot;&gt;纯发泄，Java考点&lt;/a&gt; (9)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/cute-c-program.html&quot; title=&quot;一个很好很强大的程序 (2008-01-13)&quot;&gt;一个很好很强大的程序&lt;/a&gt; (1)&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/CasparAnt/f5f5f291cb7f26dc79b125d26d8f5c9b&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/CasparAnt/f5f5f291cb7f26dc79b125d26d8f5c9b/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;&lt;br /&gt;&lt;!-- Feedsky flare --&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=f92f0214ed2300465323c7adc824a437&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=f92f0214ed2300465323c7adc824a437&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=5fec45045192c42f68402edf601cf8f5&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=5fec45045192c42f68402edf601cf8f5&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=cacee1c1b04c37549867010246782664&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=cacee1c1b04c37549867010246782664&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=f7960fe5df33bc50ad58b7ea6e84cc87&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=f7960fe5df33bc50ad58b7ea6e84cc87&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;!-- /Feedsky flare --&gt;</content:encoded><wfw:commentRss>http://www.casparant.com/using-c-system-call-to-solve-smoker-problem-under-linux.html/feed</wfw:commentRss><description>问题描述:The Cigarette-Smokers Problem. Consider a system with three smoker processes and one agent process. Each smoker continuously rolls a cigarette and then smokes it. But to roll and smoke a cigarette, the smoker needs three ingredients: tobacco, paper, and matches. One of the smoker processes has paper, another has tobacco, and the third has matches. [......&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/CasparAnt/f5f5f291cb7f26dc79b125d26d8f5c9b&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/CasparAnt/f5f5f291cb7f26dc79b125d26d8f5c9b/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;&lt;br /&gt;&lt;!-- Feedsky flare --&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=f92f0214ed2300465323c7adc824a437&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=f92f0214ed2300465323c7adc824a437&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=5fec45045192c42f68402edf601cf8f5&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=5fec45045192c42f68402edf601cf8f5&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=cacee1c1b04c37549867010246782664&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=cacee1c1b04c37549867010246782664&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=f7960fe5df33bc50ad58b7ea6e84cc87&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=f7960fe5df33bc50ad58b7ea6e84cc87&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;!-- /Feedsky flare --&gt;</description><category>syscall</category><category>semaphore</category><category>C</category><category>operating system</category><category>cigarette smoker</category><category>smoker</category><category>java</category><category>Programming</category><category>system call</category><pubDate>Sun, 09 Nov 2008 22:02:37 +0800</pubDate><author>Ant</author><comments>http://www.casparant.com/using-c-system-call-to-solve-smoker-problem-under-linux.html#comments</comments><guid isPermaLink="false">http://www.casparant.com/?p=192</guid><dc:creator>Ant</dc:creator><fs:srclink>http://www.casparant.com/using-c-system-call-to-solve-smoker-problem-under-linux.html</fs:srclink><fs:srcfeed>http://www.casparant.com/feed</fs:srcfeed><fs:itemid>feedsky/CasparAnt/~6986320/137243594/5070230</fs:itemid></item><item><title>推荐！飞信手机3.0体验版</title><link>http://www.casparant.com/recommend-fetion-3.html</link><content:encoded>&lt;div id=&quot;lw_context_ads&quot;&gt;&lt;p class='fp'&gt;经&lt;a href=&quot;http://hsummer.com&quot;&gt;Summer大人&lt;/a&gt;告知，飞信手机版已经有3.0测试版了。我最关心的问题是3.0版本能否支持震动提醒，其原因是我在教室上课的时候开着飞信，关闭了声音提示，结果某慕老是说我不回短信，我不是没收到提醒么……&lt;/p&gt;
&lt;p&gt;前往&lt;a href=&quot;http://ue.fetion.com.cn/News.aspx?ID=10&quot;&gt;这里&lt;/a&gt;查看，果然有3.0的测试版了，查看了下我的N81在支持列表上，可惜下下来之后是N95的，不过装好后能正常使用。&lt;/p&gt;
&lt;p&gt;体验了一把，感觉相当cool，类iPhone的界面(配在N95上确实会显得更合适)，进飞信界面之后不是像2.0版本一样直接出聊天窗口，而是有一个集成界面，包含了设置、聊天、电话簿管理、资讯、掌上营业厅等功能，不过对我来说这些功能都是偶尔用到而已，我更关心的是飞信聊天。&lt;/p&gt;
&lt;p&gt;震动提示果然有了，而且可以和手机情景模式关联了。就凭这一点，我就毫不犹豫地换下了原来的2.0版本。&lt;/p&gt;
&lt;p&gt;不过毕竟是测试版，刚用了半个小时，就发现了好多BUG，等下去社区提交吧，对这个版本还是非常期待的～～&lt;/p&gt;
&lt;/p&gt;&lt;/div&gt;

	标签：&lt;a href=&quot;http://www.casparant.com/tag/30&quot; title=&quot;3.0&quot; rel=&quot;tag&quot;&gt;3.0&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/beta&quot; title=&quot;beta&quot; rel=&quot;tag&quot;&gt;beta&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/fetion&quot; title=&quot;fetion&quot; rel=&quot;tag&quot;&gt;fetion&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/%e9%a3%9e%e4%bf%a1&quot; title=&quot;飞信&quot; rel=&quot;tag&quot;&gt;飞信&lt;/a&gt;&lt;br /&gt;

	&lt;h2&gt;Related Posts&lt;/h2&gt;
	&lt;ul class=&quot;st-related-posts&quot;&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/something-about-pidgin.html&quot; title=&quot;pidgin琐碎二三事 (2008-08-19)&quot;&gt;pidgin琐碎二三事&lt;/a&gt; (1)&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/CasparAnt/152c0f6562ff7d3c39fe901079dc2aa5&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/CasparAnt/152c0f6562ff7d3c39fe901079dc2aa5/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;&lt;br /&gt;&lt;!-- Feedsky flare --&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=7f0ad7aad8f36826bbaaa51dd1cc9101&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=7f0ad7aad8f36826bbaaa51dd1cc9101&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=92cb031652bb8a53a18811b94a635983&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=92cb031652bb8a53a18811b94a635983&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=2cfe6049d7e40ed182692b144195f68a&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=2cfe6049d7e40ed182692b144195f68a&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=a20885a5426d33b836987ed2493e2218&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=a20885a5426d33b836987ed2493e2218&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;!-- /Feedsky flare --&gt;</content:encoded><wfw:commentRss>http://www.casparant.com/recommend-fetion-3.html/feed</wfw:commentRss><description>经Summer大人告知，飞信手机版已经有3.0测试版了。我最关心的问题是3.0版本能否支持震动提醒，其原因是我在教室上课的时候开着飞信，关闭了声音提示，结果某慕老是说我不回短信，我不是没收到提醒么……
前往这里查看，果然有3.0的测试版了，查看了下我的N81在支持列表上，可惜下下来之后是N95的，不过装好后能正常使用。
体验了一把，感觉相当cool，类iPhone的界面(配在N95上确实会显得更合适)，进飞信界面之后不是像2.0版本一样直接出聊天窗口，而是有一个集成界面，包含了设置、聊天、电话簿管理、资讯、掌上营业厅等功能，不过对我来说这些功能都是偶尔用到而已，我更关心的是飞信聊天。
震动提示果然有了，而且可以和手机情景模式关联了。就凭这一点，我就毫不犹豫地换下了原来的2.0版本。
不过毕竟是测试版，刚用了半个小时，就发现了好多BUG，等下去社区提交吧，对这个版本还是非常期待的～～


	标签：3.0, beta, fetion, 飞信

	Related Posts
	
	pid...&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/CasparAnt/152c0f6562ff7d3c39fe901079dc2aa5&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/CasparAnt/152c0f6562ff7d3c39fe901079dc2aa5/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;&lt;br /&gt;&lt;!-- Feedsky flare --&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=7f0ad7aad8f36826bbaaa51dd1cc9101&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=7f0ad7aad8f36826bbaaa51dd1cc9101&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=92cb031652bb8a53a18811b94a635983&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=92cb031652bb8a53a18811b94a635983&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=2cfe6049d7e40ed182692b144195f68a&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=2cfe6049d7e40ed182692b144195f68a&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=a20885a5426d33b836987ed2493e2218&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=a20885a5426d33b836987ed2493e2218&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;!-- /Feedsky flare --&gt;</description><category>beta</category><category>Softwares</category><category>3.0</category><category>飞信</category><category>fetion</category><pubDate>Sun, 02 Nov 2008 22:34:44 +0800</pubDate><author>Ant</author><comments>http://www.casparant.com/recommend-fetion-3.html#comments</comments><guid isPermaLink="false">http://www.casparant.com/?p=190</guid><dc:creator>Ant</dc:creator><fs:srclink>http://www.casparant.com/recommend-fetion-3.html</fs:srclink><fs:srcfeed>http://www.casparant.com/feed</fs:srcfeed><fs:itemid>feedsky/CasparAnt/~6986320/137243595/5070230</fs:itemid></item><item><title>(杂物间)我的Ubuntu 8.10配置</title><link>http://www.casparant.com/my-ubuntu-intrepid-config.html</link><content:encoded>&lt;div id=&quot;lw_context_ads&quot;&gt;&lt;p class='fp'&gt;注：这篇文章不是写给屏幕前的你的，是我自己堆放杂物用的。&lt;/p&gt;
&lt;p&gt;首先删除我不需要的软件：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;bash bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;aptitude&lt;/span&gt; purge \
evolution evolution-common evolution-exchange evolution-plugins evolution-webcal \
tracker tracker-search-tool tracker-utils \
gnome-games ekiga gnome-orca f-spot xsane rhythmbox brasero \
totem totem-common totem-gstreamer totem-mozilla totem-plugins \
openoffice.org-base-core openoffice.org-gtk openoffice.org-impress openoffice.org-style-human \
openoffice.org-calc openoffice.org-help-en-gb openoffice.org-l10n-common \
openoffice.org-thesaurus-en-au openoffice.org-common openoffice.org-help-en-us \
openoffice.org-l10n-en-gb openoffice.org-thesaurus-en-us openoffice.org-core \
openoffice.org-help-zh-cn openoffice.org-l10n-en-za openoffice.org-writer openoffice.org-draw \
openoffice.org-help-zh-tw openoffice.org-l10n-zh-cn openoffice.org-emailmerge \
openoffice.org-hyphenation openoffice.org-l10n-zh-tw openoffice.org-gnome \
openoffice.org-hyphenation-en-us  openoffice.org-math&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;span id=&quot;more-188&quot;&gt;&lt;/span&gt;然后安装各种软件：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;bash bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;apt-get&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;install&lt;/span&gt; build-essential sun-java6-&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;*&lt;/span&gt; ant vim-full subversion subversion-tools \
&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;bison&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;flex&lt;/span&gt; apache2 mysql-server php5-common php5-mysql phpmyadmin &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;autoconf&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;automake&lt;/span&gt; codeblocks \
libwxbase2.8-0 libwxgtk2.8-0 libwxbase2.8-dev libwxgtk2.8-dev \
texlive texlive-math-extra texlive-latex-base texlive-latex-extra \
texlive-latex-recommended texlive-pictures texlive-science texlive-bibtex-extra \
texlive-common latex-beamer latex-cjk-chinese ttf-arphic-&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;*&lt;/span&gt; hbf-&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;*&lt;/span&gt; \
openssh-server samba winbind cvsd telnetd libxine1-ffmpeg \
scim-bridge-client-qt compizconfig-settings-manager python-mutagen tilda \
gstreamer0.10-&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;*&lt;/span&gt; smplayer mplayer-nogui mozilla-mplayer vlc mozilla-plugin-vlc \
audacious audacious-plugins audacious-plugins-extra amarok gftp qterm checkgmail \
rar unrar alien p7zip-full zhcon eva avant-window-navigator awn-manager&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;&lt;p&gt;编程开发工具&lt;br /&gt;
gcc+gdb：build-essential&lt;br /&gt;
&lt;a href=&quot;http://www.casparant.com/tag/java&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 java 下的日志&quot;&gt;Java&lt;/a&gt;：sun-java6-* ant&lt;br /&gt;
编辑器VIM：vim-full&lt;br /&gt;
版本控制：subversion subversion-tools&lt;br /&gt;
词法分析：Bison/Flex：bison flex&lt;br /&gt;
LAMP：apache2 &lt;a href=&quot;http://www.casparant.com/tag/mysql&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 mysql 下的日志&quot;&gt;mysql&lt;/a&gt;-server php5-common php5-&lt;a href=&quot;http://www.casparant.com/tag/mysql&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 mysql 下的日志&quot;&gt;mysql&lt;/a&gt; phpmyadmin&lt;br /&gt;
Autotools：autoconf automake&lt;br /&gt;
IDE Codeblocks：codeblocks&lt;br /&gt;
wxWidgets库：libwxbase2.8-0 libwxgtk2.8-0 libwxbase2.8-dev libwxgtk2.8-dev&lt;br /&gt;
Latex：texlive texlive-math-extra texlive-latex-base texlive-latex-extra \&lt;br /&gt;
texlive-latex-recommended texlive-pictures texlive-science texlive-bibtex-extra \&lt;br /&gt;
texlive-common latex-beamer latex-cjk-chinese ttf-arphic-* hbf-*&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;p&gt;服务&lt;br /&gt;
SSH：openssh-server&lt;br /&gt;
SAMBA：samba winbind&lt;br /&gt;
CVS：cvsd&lt;br /&gt;
Telnet：telnetd&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;p&gt;实用软件&lt;br /&gt;
SCIM-Bridge：scim-bridge-client-qt&lt;br /&gt;
Compiz特效管理器CCSM：compizconfig-settings-manager&lt;br /&gt;
DOCK栏&lt;a href=&quot;http://www.casparant.com/tag/awn&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 awn 下的日志&quot;&gt;awn&lt;/a&gt;：avant-window-navigator &lt;a href=&quot;http://www.casparant.com/tag/awn&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 awn 下的日志&quot;&gt;awn&lt;/a&gt;-manager&lt;br /&gt;
音乐ID3v2标签转码Mutagen：&lt;a href=&quot;http://www.casparant.com/tag/python&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 python 下的日志&quot;&gt;python&lt;/a&gt;-mutagen&lt;br /&gt;
嵌入式终端Tilda：tilda&lt;br /&gt;
ZIP tools：rar unrar alien p7zip-full&lt;br /&gt;
CHM Viewer：kchmviewer&lt;br /&gt;
解码器gstreamer：gstreamer0.10-* libxine1-ffmpeg&lt;br /&gt;
视频播放Mplayer/SMplayer：smplayer mplayer-nogui mozilla-mplayer&lt;br /&gt;
视频播放器VLC：vlc mozilla-plugin-vlc&lt;br /&gt;
音乐播放器Audacious：audacious audacious-plugins audacious-plugins-extra&lt;br /&gt;
音乐管理器Amarok：amarok&lt;br /&gt;
eva：eva&lt;br /&gt;
gFTP：gftp&lt;br /&gt;
Qterm：qterm&lt;br /&gt;
CheckGmail：checkgmail&lt;br /&gt;
zhcon：zhcon&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;最后是各种编译三部曲时候需要用到的dev包或者不常用的软件包&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;bash bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;apt-get&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;install&lt;/span&gt; xorg-dev libx11-dev python-dev \
libgtk2.0-dev python-gtk2-dev python-cairo-dev libglade2-dev libdbus-glib-&lt;span style=&quot;color: #000000;&quot;&gt;1&lt;/span&gt;-dev \
libgnome-desktop-dev libgnome2-dev libgnomevfs2-dev libgconf2-dev libwnck-dev \
libqt3-headers libqt3-mt-dev kdelibs4-dev libvte-dev libconfuse-dev libsexy-dev \
libnotify-dev librsvg2-dev libgnome-menu-dev libgtop2-dev python-alsaaudio \
python-feedparser libpanel-applet2-dev libsigc++-&lt;span style=&quot;color: #000000;&quot;&gt;2.0&lt;/span&gt;-dev libglibmm-&lt;span style=&quot;color: #000000;&quot;&gt;2.4&lt;/span&gt;-dev \
libgtkmm-&lt;span style=&quot;color: #000000;&quot;&gt;2.4&lt;/span&gt;-dev libgnomeuimm-&lt;span style=&quot;color: #000000;&quot;&gt;2.6&lt;/span&gt;-dev libgnet-dev libgdome2-dev intltool \
python-gnome2-extras libgtkspell-dev libmeanwhile-dev network-manager-dev \
libperl-dev tcl-dev tk-dev libmad0-dev libavcodec-dev libavformat-dev libpostproc-dev \
liba52-dev libfribidi-dev libqt4-dev libqt4-sql-sqlite libsvn1 libtool pyqt4-dev-tools python-qt4 \
python-qt4-common pidgin-dev libpurple-dev doxygen graphviz libnspr4-dev libnss3-dev&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;———————————— 预留分割线，用于Ubuntu 8.10体验 ————————————&lt;/p&gt;
&lt;p&gt;1. Ubuntu 8.10 安装中文语言包后，默认安装了两个软件 PCMan X BBS Client和stardict，前者功能还比不上QTerm，除了表情功能比较方便之外；后者是我们不可或缺的软件，&lt;del datetime=&quot;2008-11-15T05:37:31+00:00&quot;&gt;默认安装了字典，很贴心的改进。&lt;/del&gt;字典是在线获取的，要离线字典还得去那个死慢死慢的网页上去下&lt;/p&gt;
&lt;p&gt;待续。&lt;/p&gt;
&lt;/p&gt;&lt;/div&gt;

	标签：&lt;a href=&quot;http://www.casparant.com/tag/config&quot; title=&quot;config&quot; rel=&quot;tag&quot;&gt;config&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/intrepid&quot; title=&quot;intrepid&quot; rel=&quot;tag&quot;&gt;intrepid&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/ubuntu-810&quot; title=&quot;ubuntu 8.10&quot; rel=&quot;tag&quot;&gt;ubuntu 8.10&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/ubuntu-intrepid&quot; title=&quot;ubuntu intrepid&quot; rel=&quot;tag&quot;&gt;ubuntu intrepid&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/ubuntu-linux&quot; title=&quot;Ubuntu Linux&quot; rel=&quot;tag&quot;&gt;Ubuntu Linux&lt;/a&gt;&lt;br /&gt;

	&lt;h2&gt;Related Posts&lt;/h2&gt;
	&lt;ul class=&quot;st-related-posts&quot;&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/ubuntu-hardy-config.html&quot; title=&quot;[Ubuntu配置系列之四]Ubuntu 8.04 粗粒度配置 (2008-04-29)&quot;&gt;[Ubuntu配置系列之四]Ubuntu 8.04 粗粒度配置&lt;/a&gt; (11)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/pkg-config.html&quot; title=&quot;我是菜鸟之pkg-config命令 (2008-07-19)&quot;&gt;我是菜鸟之pkg-config命令&lt;/a&gt; (3)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/stop-trying-gentoo.html&quot; title=&quot;咱先不折腾了 (2008-09-03)&quot;&gt;咱先不折腾了&lt;/a&gt; (16)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/opera-font-config.html&quot; title=&quot;[转]Ubuntu下Opera字体配置 (2008-02-21)&quot;&gt;[转]Ubuntu下Opera字体配置&lt;/a&gt; (2)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/ubuntu-configuration-appendix.html&quot; title=&quot;[Ubuntu配置系列之八]Ubuntu配置补遗 (2008-10-31)&quot;&gt;[Ubuntu配置系列之八]Ubuntu配置补遗&lt;/a&gt; (0)&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/CasparAnt/756f154b9d965a27df4abef3ab85deae&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/CasparAnt/756f154b9d965a27df4abef3ab85deae/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;&lt;br /&gt;&lt;!-- Feedsky flare --&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=c791dd6d98d76af661c788ce899f011f&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=c791dd6d98d76af661c788ce899f011f&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=95bb802452876b343ca5ed1ae772858e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=95bb802452876b343ca5ed1ae772858e&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=646434aa63a7583a90322d8c72469311&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=646434aa63a7583a90322d8c72469311&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=2ec23116ccaa38f191478fb708d16ace&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=2ec23116ccaa38f191478fb708d16ace&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;!-- /Feedsky flare --&gt;</content:encoded><wfw:commentRss>http://www.casparant.com/my-ubuntu-intrepid-config.html/feed</wfw:commentRss><description>注：这篇文章不是写给屏幕前的你的，是我自己堆放杂物用的。
首先删除我不需要的软件：

sudo aptitude purge \
evolution evolution-common evolution-exchange evolution-plugins evolution-webcal \
tracker tracker-search-tool tracker-utils \
gnome-games ekiga gnome-orca f-spot xsane rhythmbox brasero \
totem totem-common totem-gstreamer totem-mozilla totem-plugins \
openoffice.org-base-core openoffice.org-gtk openoffice.org-impress openoffice.org-style-human \
openoffice.org-calc openoffice.org-help-en-gb openoffice.org-l10n-common \
openoffice.org-thesaurus-en-au openoffice.org-common openoffice.org-help-en-us \
openoffice.org-l10n-en-gb openoffice.org-thesaurus-en-us openoffice.org-core \
openoffice.org-help-zh-cn openoffice.org-l10n-en-za openoffice.org-writer openoffice.org-draw \
openoffice.org-help-zh-tw openoffice.org-l10n-zh-cn openoffice.org-emailmerge \
openoffice.org-hyphenation openoffice.org-l10n-zh-tw openoffice.org-gnome \
openoffice.org-hyphenation-en-us  openoffice.org-math

然后安装各种软件：

sudo apt-get install build-essential sun-java6-* ant vim-full [......&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/CasparAnt/756f154b9d965a27df4abef3ab85deae&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/CasparAnt/756f154b9d965a27df4abef3ab85deae/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;&lt;br /&gt;&lt;!-- Feedsky flare --&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=c791dd6d98d76af661c788ce899f011f&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=c791dd6d98d76af661c788ce899f011f&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=95bb802452876b343ca5ed1ae772858e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=95bb802452876b343ca5ed1ae772858e&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=646434aa63a7583a90322d8c72469311&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=646434aa63a7583a90322d8c72469311&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=2ec23116ccaa38f191478fb708d16ace&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=2ec23116ccaa38f191478fb708d16ace&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;!-- /Feedsky flare --&gt;</description><category>Ubuntu Linux</category><category>intrepid</category><category>ubuntu intrepid</category><category>ubuntu 8.10</category><category>config</category><pubDate>Sat, 01 Nov 2008 23:25:22 +0800</pubDate><author>Ant</author><comments>http://www.casparant.com/my-ubuntu-intrepid-config.html#comments</comments><guid isPermaLink="false">http://www.casparant.com/?p=188</guid><dc:creator>Ant</dc:creator><fs:srclink>http://www.casparant.com/my-ubuntu-intrepid-config.html</fs:srclink><fs:srcfeed>http://www.casparant.com/feed</fs:srcfeed><fs:itemid>feedsky/CasparAnt/~6986320/137243596/5070230</fs:itemid></item><item><title>[Ubuntu配置系列之八]Ubuntu配置补遗</title><link>http://www.casparant.com/ubuntu-configuration-appendix.html</link><content:encoded>&lt;div id=&quot;lw_context_ads&quot;&gt;&lt;p class='fp'&gt;值此Ubuntu 8.10发布之际（终于发布了，再不发布那就得叫Ubuntu 8.11了），特作此文。本文只是作为一个Ubuntu入门教材参考，因为很多人说我写Ubuntu安装教程时很多地方写的很模糊，对于没有&lt;a href=&quot;http://www.casparant.com/tag/linux&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 Linux 下的日志&quot;&gt;Linux&lt;/a&gt;基础的人来说无异于天书- -b 孩子们，满足你们的愿望吧…&lt;/p&gt;
&lt;p&gt;本文基于如下对读者的假设：&lt;/p&gt;
&lt;p&gt;1. &lt;a href=&quot;http://www.casparant.com/tag/ubuntu-linux&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 Ubuntu Linux 下的日志&quot;&gt;Ubuntu Linux&lt;/a&gt;安装成功。如果迄今为止没有成功，请询问身边已经安装成功的人。我相信安装成功的人的数量，在学校抓一把至少其中含有一个。&lt;/p&gt;
&lt;p&gt;2. 了解终端是什么，知道如何打开终端输入命令，了解命令语法。如果不知道如何打开终端输入命令，我也没办法……以下所有叙述，如果涉及命令操作，必然是在终端中进行操作。学过DOS的人应该对这一点在理解上没有难度，在&lt;a href=&quot;http://www.casparant.com/tag/windows&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 windows 下的日志&quot;&gt;Windows&lt;/a&gt;下用过cmd 运行ping命令检测网络的人在理解上应该也没有难度。关于命令的语法，比如sudo apt-get install OO_AND_XX这个命令，表示在使用root权限(sudo)的情况下使用软件包管理工具(apt-get)进行安装 (install)OO_AND_XX这个软件包的操作；同理sudo gedit /etc/apt/sources.list这个命令表示在使用root权限的情况下使用gedit这个文本编辑器打开/etc/apt/路径下的 sources.list这个文件进行编辑(真费劲- -b)&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-193&quot;&gt;&lt;/span&gt;3.了解&lt;a href=&quot;http://www.casparant.com/tag/linux&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 Linux 下的日志&quot;&gt;Linux&lt;/a&gt;下root权限的基本知识，为什么在2中的例子都要带上root而你见过的Redhat的教科书上就没有？因为上述命令是需要root权限的……&lt;/p&gt;
&lt;p&gt;由于Ubuntu LiveCD不带开发工具的不良嗜好，在进行编程和开发之前，需要解决工具的安装问题。你所需要的工具都需要从网络上获取，因此你需要更新你的网络源。网络源是一个仓库，通过在/etc/apt/sources.list下的URL更新仓库中的软件包列表，然后通过apt-get或aptitude工具从列表上下载、安装、卸载所需的软件包。&lt;/p&gt;
&lt;p&gt;在此提供一些比较好的教育网内的源列表：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;# 北邮Openware源，北邮校内人士首选源。曾经我说过这个源比较不稳定，但是后来经过验证，还是挺稳定的，推荐&lt;br /&gt;
deb ftp://openware.byr.edu.cn/pub/mirror/ubuntu/ hardy main multiverse restricted universe&lt;br /&gt;
deb ftp://openware.byr.edu.cn/pub/mirror/ubuntu/ hardy-backports main multiverse restricted universe&lt;br /&gt;
deb ftp://openware.byr.edu.cn/pub/mirror/ubuntu/ hardy-proposed main multiverse restricted universe&lt;br /&gt;
deb ftp://openware.byr.edu.cn/pub/mirror/ubuntu/ hardy-security main multiverse restricted universe&lt;br /&gt;
deb ftp://openware.byr.edu.cn/pub/mirror/ubuntu/ hardy-updates main multiverse restricted universe&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;p&gt;# 台湾高性能计算中心(NCHC)源：&lt;br /&gt;
deb http://free.nchc.org.tw/ubuntu/ hardy main restricted multiverse universe&lt;br /&gt;
deb http://free.nchc.org.tw/ubuntu/ hardy-updates main restricted multiverse universe&lt;br /&gt;
deb http://free.nchc.org.tw/ubuntu/ hardy-security main restricted multiverse universe&lt;br /&gt;
deb http://free.nchc.org.tw/ubuntu/ hardy-proposed main restricted multiverse universe&lt;br /&gt;
deb http://free.nchc.org.tw/ubuntu/ hardy-backports main restricted multiverse universe&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;p&gt;# 台湾交大(NCTU)源：&lt;br /&gt;
deb http://ubuntu.csie.nctu.edu.tw/ubuntu/ hardy main multiverse restricted universe&lt;br /&gt;
deb http://ubuntu.csie.nctu.edu.tw/ubuntu/ hardy-backports main multiverse restricted universe&lt;br /&gt;
deb http://ubuntu.csie.nctu.edu.tw/ubuntu/ hardy-proposed main multiverse restricted universe&lt;br /&gt;
deb http://ubuntu.csie.nctu.edu.tw/ubuntu/ hardy-security main multiverse restricted universe&lt;br /&gt;
deb http://ubuntu.csie.nctu.edu.tw/ubuntu/ hardy-updates main multiverse restricted universe&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;从上述三个中挑选一个源，覆盖到/etc/apt/sources.list下即可。覆盖方法：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;bash bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; gedit &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;apt&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;sources.list&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;打开后挑选一个源，复制到文件中，覆盖原内容，保存退出。其中要注意的一点是，如果你的Ubuntu版本是8.04，那么保持源列表中的&quot;hardy&quot;不变，如果你的是Ubuntu 8.10，请将所有的&quot;hardy&quot;改成&quot;Intrepid&quot;，如果是7.10，那么改成&quot;gutsy&quot;。&lt;/p&gt;
&lt;p&gt;安装完毕之后，请执行下列命令更新软件列表(仅仅是软件列表，还没有更新系统和下载软件)：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;bash bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;apt-get&lt;/span&gt; update&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;更新完毕之后，如果你的网速太慢，就不要执行更新操作了，凑合着用吧，如果速度还行，可以执行下列命令更新系统：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;bash bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;apt-get&lt;/span&gt; dist-upgrade&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;更新或者没有更新完系统之后，可以选择安装中文输入法和中文语言包支持。这一步我一般是在图形界面下完成的：到系统(System)-&gt;系统管理(Administration)-&gt;语言支持(Language Support)中，勾选汉语(Chinese)选项，自动下载中文语言包和SCIM的拼音支持。&lt;/p&gt;
&lt;p&gt;准备工作结束，可以开始安装编译器gcc了。&lt;/p&gt;
&lt;p&gt;如果你只是运行sudo apt-get install gcc，那么当你写完一个&lt;a href=&quot;http://www.casparant.com/tag/c&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 C 下的日志&quot;&gt;c&lt;/a&gt;程序之后运行gcc test.&lt;a href=&quot;http://www.casparant.com/tag/c&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 C 下的日志&quot;&gt;c&lt;/a&gt;会提示你找不到头文件。那是因为你没有装libc-dev这个包。包含lib开头和dev结尾的软件包在Ubuntu下很流行，它表示这是一个开发库(developing library)，其中包含了&lt;a href=&quot;http://www.casparant.com/tag/c&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 C 下的日志&quot;&gt;C&lt;/a&gt;语言标准头文件和库。在Ubuntu下另外有一个软件包集合了这些常用的&lt;a href=&quot;http://www.casparant.com/tag/c&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 C 下的日志&quot;&gt;C&lt;/a&gt;/&lt;a href=&quot;http://www.casparant.com/tag/c&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 C 下的日志&quot;&gt;C&lt;/a&gt;++开发工具，它的名字叫build- essential。所以你可以只运行下列命令就可以完成gcc的配置：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;bash bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;apt-get&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;install&lt;/span&gt; build-essential&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;gcc是一个强大的工具，目前我只是使用它来编译&lt;a href=&quot;http://www.casparant.com/tag/c&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 C 下的日志&quot;&gt;C&lt;/a&gt;、&lt;a href=&quot;http://www.casparant.com/tag/c&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 C 下的日志&quot;&gt;C&lt;/a&gt;++和ASM，关于gcc的更多使用方法，可以使用下列两个方法：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;bash bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;man&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;gcc&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;http://gcc.gnu.org/onlinedocs/&lt;/p&gt;
&lt;p&gt;至于man命令的作用，请运行man man-_-|||&lt;/p&gt;
&lt;p&gt;接下去可以按相同的方法安装gdb，只需要一条命令：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;bash bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;apt-get&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;install&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;gdb&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;然后谈谈vi。现在大家使用的vi基本上都是vim，可以使用方向键来控制移动，而Ubuntu自带的vi由于习惯问题让人很不适应，所以你应该安装vim-full这个软件，它包含了vim和gvim，后者是一个GUI化的vim编辑器：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;bash bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;apt-get&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;install&lt;/span&gt; vim-full&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;刚离开VS或者VC的你，可能不适应&lt;a href=&quot;http://www.casparant.com/tag/linux&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 Linux 下的日志&quot;&gt;Linux&lt;/a&gt;下的编程环境。然而适应VI的操作是一个必须的技能，传说&lt;a href=&quot;http://www.casparant.com/tag/linux&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 Linux 下的日志&quot;&gt;Linux&lt;/a&gt;程序员有三种，使用VI进行开发的，使用EMACS开发的，和使用其他进行开发的。如果你有兴趣了解emacs，可以运行下列命令：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;bash bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;apt-get&lt;/span&gt; &lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;install&lt;/span&gt; emacs&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;*&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;vi和emacs的使用，请访问下列站点：&lt;/p&gt;
&lt;p&gt;http://vimdoc.sourceforge.net/htmldoc/usr_toc.html&lt;/p&gt;
&lt;p&gt;http://www.gnu.org/software/emacs/manual/&lt;/p&gt;
&lt;p&gt;至此，vi+gcc+gdb的开发环境基本上搭建完毕，进行操作系统课上的基础编程作业应该绰绰有余了。&lt;/p&gt;
&lt;/p&gt;&lt;/div&gt;

	标签：&lt;a href=&quot;http://www.casparant.com/tag/configure&quot; title=&quot;configure&quot; rel=&quot;tag&quot;&gt;configure&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/programming&quot; title=&quot;Programming&quot; rel=&quot;tag&quot;&gt;Programming&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/ubuntu-linux&quot; title=&quot;Ubuntu Linux&quot; rel=&quot;tag&quot;&gt;Ubuntu Linux&lt;/a&gt;&lt;br /&gt;

	&lt;h2&gt;Related Posts&lt;/h2&gt;
	&lt;ul class=&quot;st-related-posts&quot;&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/stop-trying-gentoo.html&quot; title=&quot;咱先不折腾了 (2008-09-03)&quot;&gt;咱先不折腾了&lt;/a&gt; (16)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/ubuntu-hardy-config.html&quot; title=&quot;[Ubuntu配置系列之四]Ubuntu 8.04 粗粒度配置 (2008-04-29)&quot;&gt;[Ubuntu配置系列之四]Ubuntu 8.04 粗粒度配置&lt;/a&gt; (11)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/wine-in-ubuntu.html&quot; title=&quot;[Ubuntu配置系列之二]Wine在Ubuntu下的优异表现 (2008-01-26)&quot;&gt;[Ubuntu配置系列之二]Wine在Ubuntu下的优异表现&lt;/a&gt; (9)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/ubuntu-hardy-released.html&quot; title=&quot;[Ubuntu Hardy小白鼠专题五]Ubuntu 8.04发布 (2008-04-24)&quot;&gt;[Ubuntu Hardy小白鼠专题五]Ubuntu 8.04发布&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/gcc-4-3-1-bootstrap-succeeded-under-opensolaris.html&quot; title=&quot;OpenSolaris编译安装gcc4.3.1成功 (2008-08-13)&quot;&gt;OpenSolaris编译安装gcc4.3.1成功&lt;/a&gt; (0)&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/CasparAnt/19410b9bb6b00646a886367a4ffbb4ee&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/CasparAnt/19410b9bb6b00646a886367a4ffbb4ee/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;&lt;br /&gt;&lt;!-- Feedsky flare --&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=9e41f09c0599cb679dc749cfde58c33f&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=9e41f09c0599cb679dc749cfde58c33f&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=51cb3abcb633b0abf7c7e803aeecaf66&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=51cb3abcb633b0abf7c7e803aeecaf66&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=6a4bdcf05dd8ee4b20da1585c6bd8892&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=6a4bdcf05dd8ee4b20da1585c6bd8892&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=cf7b5ffc05e7f35ae5b2cf32b2f33e59&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=cf7b5ffc05e7f35ae5b2cf32b2f33e59&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;!-- /Feedsky flare --&gt;</content:encoded><wfw:commentRss>http://www.casparant.com/ubuntu-configuration-appendix.html/feed</wfw:commentRss><description>值此Ubuntu 8.10发布之际（终于发布了，再不发布那就得叫Ubuntu 8.11了），特作此文。本文只是作为一个Ubuntu入门教材参考，因为很多人说我写Ubuntu安装教程时很多地方写的很模糊，对于没有Linux基础的人来说无异于天书- -b 孩子们，满足你们的愿望吧…
本文基于如下对读者的假设：
1. Ubuntu Linux安装成功。如果迄今为止没有成功，请询问身边已经安装成功的人。我相信安装成功的人的数量，在学校抓一把至少其中含有一个。
2. 了解终端是什么，知道如何打开终端输入命令，了解命令语法。如果不知道如何打开终端输入命令，我也没办法……以下所有叙述，如果涉及命令操作，必然是在终端中进行操作。学过DOS的人应该对这一点在理解上没有难度，在Windows下用过cmd 运行ping命令检测网络的人在理解上应该也没有难度。关于命令的语法，比如sudo apt-get install OO_AND_XX这个命令，表示在使用root权限(sudo)的情况下使用软件包管理工具(apt-get)进行安装 (install)OO_AND_XX这个软件...&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/CasparAnt/19410b9bb6b00646a886367a4ffbb4ee&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/CasparAnt/19410b9bb6b00646a886367a4ffbb4ee/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;&lt;br /&gt;&lt;!-- Feedsky flare --&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=9e41f09c0599cb679dc749cfde58c33f&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=9e41f09c0599cb679dc749cfde58c33f&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=51cb3abcb633b0abf7c7e803aeecaf66&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=51cb3abcb633b0abf7c7e803aeecaf66&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=6a4bdcf05dd8ee4b20da1585c6bd8892&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=6a4bdcf05dd8ee4b20da1585c6bd8892&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=cf7b5ffc05e7f35ae5b2cf32b2f33e59&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=cf7b5ffc05e7f35ae5b2cf32b2f33e59&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;!-- /Feedsky flare --&gt;</description><category>Ubuntu Linux</category><category>configure</category><category>Programming</category><pubDate>Fri, 31 Oct 2008 20:53:36 +0800</pubDate><author>Ant</author><comments>http://www.casparant.com/ubuntu-configuration-appendix.html#comments</comments><guid isPermaLink="false">http://www.casparant.com/?p=193</guid><dc:creator>Ant</dc:creator><fs:srclink>http://www.casparant.com/ubuntu-configuration-appendix.html</fs:srclink><fs:srcfeed>http://www.casparant.com/feed</fs:srcfeed><fs:itemid>feedsky/CasparAnt/~6986320/137243597/5070230</fs:itemid></item><item><title>[转]支付宝针Firefox 的安全控件 for Linux</title><link>http://www.casparant.com/alipay-for-linux.html</link><content:encoded>&lt;div id=&quot;lw_context_ads&quot;&gt;&lt;p class='fp'&gt;在支付宝的官方Blog上，已经可以使用了。打开alipay的页面终于可以登录了，只是登录后要付款，发现招行还是不行，支付宝里面没钱也是白搭啊……&lt;/p&gt;
&lt;p&gt;下载地址在这里：&lt;a href=&quot;http://blog.alipay.com/&quot;&gt;http://blog.alipay.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下面是官方消息的转载，暂时不支持数字签名。不管怎么说，还是值得期待的。&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-185&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote&gt;
&lt;p&gt;作者：西毒 与 支付宝产品技术部安全研发组&lt;/p&gt;
&lt;p&gt;自从上次支付宝在官方网志上宣布将支持 Firefox 浏览器后，已经有很多用户询问什么时候能够支持 &lt;a href=&quot;http://www.casparant.com/tag/linux&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 Linux 下的日志&quot;&gt;Linux&lt;/a&gt; 平台下的 Firefox ，现在是可以做出回答的时候了：尽管该安全控件(针对 &lt;a href=&quot;http://www.casparant.com/tag/linux&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 Linux 下的日志&quot;&gt;Linux&lt;/a&gt; 下 Firefox 的安全控件)还没有正式在官方网站上发布，本 Blog 用户可以提前体验啦。&lt;/p&gt;
&lt;p&gt;      下载: &lt;a href=&quot;http://blog.alipay.com/wp-content/2008/10/aliedit.tar.gz&quot;&gt;支付宝安全控件 for Linux 平台 的 Firefox&lt;/a&gt; ( MD5:02240053d32688ed996e3a4788042801 ) &lt;/p&gt;
&lt;p&gt;使用方法：下载上述链接的文件，解压缩成两个文件:&lt;/p&gt;
&lt;p&gt;$ tar -zxvf aliedit.tar.gz &lt;/p&gt;
&lt;p&gt;推荐校验 MD5 值：&lt;/p&gt;
&lt;p&gt;$ md5sum aliedit.tar.gz&lt;br /&gt;
02240053d32688ed996e3a4788042801  aliedit.tar.gz&lt;/p&gt;
&lt;p&gt;并将这两个文件复制到 ~/.mozilla/plugins 目录：&lt;/p&gt;
&lt;p&gt;$ cp aliedit.so aliedit.xpt ~/.mozilla/plugins &lt;/p&gt;
&lt;p&gt;重新启动 Firefox 即可。&lt;/p&gt;
&lt;p&gt;安全提示：下载前请做一下 MD5 校验。同时在官方站点发布正式的针对 &lt;a href=&quot;http://www.casparant.com/tag/linux&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 Linux 下的日志&quot;&gt;Linux&lt;/a&gt; 下 Firefox 的安全控件之前，不要相信任何来自其他网站的安全控件。&lt;/p&gt;
&lt;p&gt;补充说明：目前在 &lt;a href=&quot;http://www.casparant.com/tag/linux&quot; class=&quot;st_tag internal_tag&quot; rel=&quot;tag&quot; title=&quot;标签 Linux 下的日志&quot;&gt;Linux&lt;/a&gt; 下的支付宝安全控件也不支持数字证书。&lt;/p&gt;
&lt;p&gt;如遇到任何问题，请在本贴留言。如遇到 Bug 或者其他软件缺陷也请即时联系我们，支付志的运营团队将为您准备一份相应的礼品。&lt;/p&gt;
&lt;p&gt;–EOF–
&lt;/p&gt;&lt;/blockquote&gt;
&lt;/p&gt;&lt;/div&gt;

	标签：&lt;a href=&quot;http://www.casparant.com/tag/alipay&quot; title=&quot;alipay&quot; rel=&quot;tag&quot;&gt;alipay&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/firefox&quot; title=&quot;firefox&quot; rel=&quot;tag&quot;&gt;firefox&lt;/a&gt;, &lt;a href=&quot;http://www.casparant.com/tag/released&quot; title=&quot;released&quot; rel=&quot;tag&quot;&gt;released&lt;/a&gt;&lt;br /&gt;

	&lt;h2&gt;Related Posts&lt;/h2&gt;
	&lt;ul class=&quot;st-related-posts&quot;&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/grnotify-100-rc1-released.html&quot; title=&quot;[推荐]grnotify-1.0.0-RC1 released (2008-05-13)&quot;&gt;[推荐]grnotify-1.0.0-RC1 released&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/ubuntu-hardy-released.html&quot; title=&quot;[Ubuntu Hardy小白鼠专题五]Ubuntu 8.04发布 (2008-04-24)&quot;&gt;[Ubuntu Hardy小白鼠专题五]Ubuntu 8.04发布&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/wordpress-26released.html&quot; title=&quot;Wordpress 2.6 发布 (2008-07-16)&quot;&gt;Wordpress 2.6 发布&lt;/a&gt; (1)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/wine-10-released.html&quot; title=&quot;Wine 1.0 Released (2008-06-18)&quot;&gt;Wine 1.0 Released&lt;/a&gt; (0)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.casparant.com/qq-for-linux-by-tencent.html&quot; title=&quot;QQ for Linux 官方版发布 (2008-07-31)&quot;&gt;QQ for Linux 官方版发布&lt;/a&gt; (9)&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/CasparAnt/5b09396911cc49367e6b6850befdacba&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/CasparAnt/5b09396911cc49367e6b6850befdacba/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;&lt;br /&gt;&lt;!-- Feedsky flare --&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=3d5e29e3bdcc0b45f0d1eedbafe5edef&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=3d5e29e3bdcc0b45f0d1eedbafe5edef&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=f0b7b8a4e01fb51ac2beaef87ca1c1cc&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=f0b7b8a4e01fb51ac2beaef87ca1c1cc&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=37dad6209e8349f449ba0d9c75bca91e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=37dad6209e8349f449ba0d9c75bca91e&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=3008a8467dfa1a746b4ac61f75bd5c15&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=3008a8467dfa1a746b4ac61f75bd5c15&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;!-- /Feedsky flare --&gt;</content:encoded><wfw:commentRss>http://www.casparant.com/alipay-for-linux.html/feed</wfw:commentRss><description>在支付宝的官方Blog上，已经可以使用了。打开alipay的页面终于可以登录了，只是登录后要付款，发现招行还是不行，支付宝里面没钱也是白搭啊……
下载地址在这里：http://blog.alipay.com/
下面是官方消息的转载，暂时不支持数字签名。不管怎么说，还是值得期待的。


作者：西毒 与 支付宝产品技术部安全研发组
自从上次支付宝在官方网志上宣布将支持 Firefox 浏览器后，已经有很多用户询问什么时候能够支持 Linux 平台下的 Firefox ，现在是可以做出回答的时候了：尽管该安全控件(针对 Linux 下 Firefox 的安全控件)还没有正式在官方网站上发布，本 Blog 用户可以提前体验啦。
      下载: 支付宝安全控件 for Linux 平台 的 Firefox ( MD5:02240053d32688ed996e3a4788042801 ) 
使用方法：下载上述链接的文件，解压缩成两个文件:
$ tar -zxvf aliedit.tar.gz 
推荐校验 MD5 值：
$ md5sum aliedit.tar.gz
02240053d32688ed996e3a4788042801  aliedit.tar.gz
并将这两个文件复制到 ~/.mozilla/plugins 目录：
$ cp aliedit.so aliedit.xpt ...&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/CasparAnt/5b09396911cc49367e6b6850befdacba&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/CasparAnt/5b09396911cc49367e6b6850befdacba/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;&lt;br /&gt;&lt;!-- Feedsky flare --&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=3d5e29e3bdcc0b45f0d1eedbafe5edef&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=3d5e29e3bdcc0b45f0d1eedbafe5edef&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=f0b7b8a4e01fb51ac2beaef87ca1c1cc&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flare/CasparAnt?i=f0b7b8a4e01fb51ac2beaef87ca1c1cc&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://feed.feedsky.com/~flare/CasparAnt?a=37dad6209e8349f449ba0d9c75bca91e&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~flar