Tag Archive for ‘linux’

Page 3 of 5

Happy Hacking keyboard pro 2的艺术

1.背景:
毕业以后我选择了程序员,而且是linux & UNIX程序员。当在公司用一个极其不顺手,按一个键卡两个键的键盘之后我萌生了换键盘的想法。我就开始寻觅键盘的旅程。
至于为什么我对键盘或者鼠标有这么高的要求,这还要从我的第一台电脑说起。当我家人答应给我第一台电脑的时候,我就向我的一个很懂计算机的哥哥求援,让他帮我装一台电脑价格在5000左右,这台电脑装下来的结果就是,主机2000,电脑外设3000。我也不懂啊,我就问他这是为什么啊,人家机子性能都那么好我的看上去不行啊。那位哥哥(他也是程序员)就说了,我觉得一个个人电脑最重要的地方就是与人有直接接触的地方,无外乎鼠标,键盘,显示器,音箱耳机,等输入输出设备。我当时也不明白,但是就有一个感觉,我家的电脑超级好用,屏幕色彩艳丽(当时最好的sony特丽珑显像管),当时我已经在用logitech的鼠标和键盘了。
到现在已经8年过去了,我也成为了一个程序员,我对外设的要求就更高了,logitech的键鼠已经不能满足我的要求,在我苦苦寻觅的时候有一张照片进入了我的视线:

他就是Richard stallman,不知道的人可以google一下,不知道的Windows程序员我不怪你,不知道的linux或者用着freesoftware的程序员我不知道说啥好了。看见他用的键盘没有,就是HHKB pro,有人戏称他用的键盘要比他用的笔记本还贵(他的那个笔记本是100美元笔记本计划的产物)。就这样我就疯狂的找他的这款键盘,当然功夫不负有心人,找到了咱们坛子。然后就找到很多相关介绍,然后就。。。在混沌那里入了。所以说我对HHKB有特别的感情,和大家不是很一样了,我喜欢的是HHKB的layout和名字,手感当然很重要,要不我也不会花那么多米整个键盘。

2. 键盘参数介绍
这个我想就不用我多介绍了,毕竟复制别人东西也不是很好,
http://en.wikipedia.org/wiki/Happy_Hacking_Keyboard
这个链接里面讲的也很清楚了,具体细节在这个页面下的References标签后面,总之很全面了

3.外观,用料,手感
这个想必是对这种高档键盘非常关心的了。我以一个新手的态度主观评价,大家听听便是,切勿妄信,后果自负。
外观 (我的桌面,自爆一下)

这个由几个图来解释吧,我多说无益。我个人觉得外观还是给你很清爽的感觉,有一点cool在里面,别的没有什么出彩之处,没有led灯,仅仅只有60个键,(这个我要说两句,我觉得挺好的,电路和程序这两种东西都是simple is the best!很简单,功能结点越少,故障点也也越少,那不就意味着故障越少么。所以我喜欢简单高效的东西)。小巧的外观,出色的便携性和多系统的适用性,绝对是一般键盘不能比拟的.

用料和手感:
1.键帽材质就是大家熟知的PBT,黑同的键帽是热升华(含浸印刷)字体和键帽融为一体,手摸在上面是一个平面。键帽相对ABS键帽的手感较硬,没有那么多任性和缓冲在里面,键面的手感是磨砂手感,同样因为比较硬,并不是一些键盘的肤质手感。(主观的说,我感觉ABS键帽的手感更好,因为ABS对我来说是暖性的,手感容易出来也就是键盘和手能够融为一体,PBT键帽给我凉凉的感觉,也许是我没有适应,但是我感觉硬朗的触摸感更能提高打字速度)。当然论质量和耐久度的话,PBT绝对一流。
还请大家看看这图,不知道是这人牛逼,还是….所以大家别迷信PBT材料,该打油的时候照样打,就是时间问题

2.按键按下的段落感比茶轴要好和青轴有点像。但是比青轴好,为什么呢?手感上说就是,按键压力比较一致,就是不管你按多深压力都差不多,cherry青轴就不同,当你按到最下面的时候,压力就变大些,这样对我来说感觉不是很畅快。想想一下,这个曲线,压力的斜率是保持不变的,一直上升(这个图是红轴的):


我还是比较喜欢有段落感,并且段落感之后的下压力最好能保持一致,让我能很轻松的完成敲击,用一句话描述这种感觉就是,冲破阻力后,立即轻松有很鲜明对比的感觉。现在我知道的类似这种手感的键盘有:8115(薄膜) 和 hhkb pro2。既然8115 和 hhkb pro2都是这样的手感,那他们有什么不同呢?8115的键帽活动度很大,给你有点散架个感觉,hhkb pro2 做工就很精细。HHKB的回弹很爽,但是8115就是比较慢了,形象点说就是有点肉了,当你火力全开的时候你就能感觉回弹的作用了,真正的帮助你键指如飞.
3.键盘的人体工学,就是那个阶梯分布,这个我非常喜欢,因为hhkb pro的阶梯分布比一般键盘明显,对我来说按键更加省力,找键更加快速。但是有个缺点就是HHKB pro和桌面有一个2厘米左右的落差,让我感觉很是不爽,垫本书就要好的多了,看来我需要手托了。

键盘布局,功能:

这个是最有争议的地方,惹的大多数人都去realforce帮了,但是我要说的是,realforce的手感和素质是和HHKB相当的,或许还要好,但是要和HHKB比功能的话,rf简直太普通(不过rf86/87好像也有contrl和caps lock对换的功能)。还是那句话,如果非要把realforce和HHKB pro 做比较的话,realforce的素质仅仅是HHKB的开始。下面我来说为什么。看见这个键盘布局图以后大家会发现什么,ESC的位置,control的位置,backspace(Delete)的位置,alt的位置和正常的104键的layout很不同? 那好你在看看这个键盘layout

这些都是sun 的键盘layout,是不是和hhkb有点像了啊

ok再看一个:

这个是苹果最新的g6键盘 铝制机身,做工超棒,手感在超薄薄膜里面和IBM的笔记本键盘能打个平手,但是致命缺点它是超薄的,所以我出了换hhkb了着两个的layout是不是也有点接近,看 左右atl键的位置和咱们普通键盘的alt位置是不以样的。
说一点背景知识,

现在sun的Solaris被认为是最纯正的UNIX,apple的MAC OS X也通过了unix的认证,所以说着两个系统都是符合UNIX规范的.

对大部分人来说,IBM的经典101键是最标准的,但是对我来说,最标准的键盘现在能找到的也就是HHKB了。所以所大家对HHKB不满也是有原因的,我入手HHKB同样也是有原因的。用途不一样需求造就不一样的产品,对于UNIX程序员来说HHKB绝对是完美的。UNIX程序员只有键盘以及快捷键的设置都遵循一个标准:“手移动最少的距离,作更多的操作”.
下面来看下HHKB在linux和unix命令行中的表现,首先介绍几个快捷键ctrl-n = 下, ctrl-b = 左,ctrl-f = 右,ctrl-p = 上, ctrl – j = 回车,ctrl-H=退格,这几个是通用的在所有的类unix的终端上都可以用,有心人你可以试试,如果你的ctrl键是标准101的layout,你可以多按几次,看看你的小手指头酸了没,然后把caps lock当成ctrl再试试呢?是不是很顺畅?人家unix本来就是照这个键位设计的…用IBM的101布局当然不爽了.

对于我个人而言除了在命令行中工作,最多的就是在vim中了(vim和Emacs是unix中乃至所有计算机系统中最强大的两个编辑器,Emacs更强,有兴趣可以google).先说vim:

看看图中都用到了哪些键?是不是根本没有F区,j,k,h,l分别对应上,下,左,右,i和esc是模式切换键同时也有很多control键组合出的快捷键.这些特点结合HHKB pro2 的layout,是不是有一种霍然开朗的感觉?这难倒是为vim定制的键盘? esc离主键区的距离正好能让我的小指够到而不需要吧食指离开F键使我的操作效率提升很多(因为vim经常要在模式中切换),control的位置让我长时间用这些组合键的时候,不会再小指头抽筋了,省去了没用的F区,让我的桌面更宽松(说实话我现在还不知道几个linux中和F区键有关的快捷键),没有方向键?我根本用不到…要说Emacs,我本人不是很常用但是我知道一点就是,Emacs中所有的功能实现都要配合control键,想想吧,上下左右要是都用ctrl,有几个人的小拇指能受的了,还好有人发明了手掌按ctrl大法这样真实缓解不少,但是哪有HHKB这种键位自然…
对于Emacs我这还有一个小插曲

Emacs是一种信仰,世界最强编辑器

http://www.pconline.com.cn/pcedu/soft/gj/photo/0609/865628.html

这个世界最强是个怎么样的强法呢?一说:Emacs是一种“信仰”。另说:世界上的程序员分三种,一种使用Emacs,一种使用vim,剩余的是其它。(完全无视其他编辑器的存在……)
Emacs就是上面提到的Richard Stallman开发维护的,世界上最强的编辑器是免费的....
Emacs 是一个很有意思缩写 Escape Meta Alt Control Shift, 呵呵没什么说的了把, HHKB是最适合Emacs不过的了.(Meta键就是windows上的win键)

上面说的都是我工作中的需求,在娱乐的时候呢,我在家用mac的笔记本,HHKB有macnitosh模式,直接切换,然后我就能有mac下面独特的多媒体键,声音大小阿,关机,弹出光盘等,还有mac系统的所有快捷键都可以用,总之和mac系统配合的是很不错的,如果说你用windows是你入手rrealforce而不选择HHKB的理由的话,我就没有任何理由了……
我在mac上也不怎么玩游戏,只玩一种,war3. 当然这个键盘的手感和layout就是不是很合适了.就不多说了.看来每个键盘都有它适合的人和地方. HHKB适合长期键入文字,尤其适合unix系统的管理员和程序员,如果你是mac用户的话也同样适合.如果是游戏或者windows的话我觉得HHKB不是一个最好的选择.

4.happy hacking的来历
happy hacking 本来是 Emacs的一个标语 ,也是stallman本人的信条
大家可以看这里 有个T-shirt 就是happy hacking
http://shop.fsf.org/product/happy-hacking-shirt/



这个背后的标志就是Emacs的标志

http://terse.yo2.cn/articles/rms清华行.html 有兴趣的可以看这里
5.DIP开关:
这个我专门翻译了一篇linuxjoury的文章,
Happy Hacking Keyboard Professional Review

后记:
HHKB绝对是一款经典的产品,就因为他的经典国外有好多geek都喜欢mod HHKB,下面就是一些图赏:

HHKB对于我来说,不仅仅是一个键盘那么简单,他小巧的身躯里散发这UNIX的精髓,可以说算是一种信仰吧.

Happy Hacking Keyboard Professional Review(中文翻译)

原文链接:http://www.linuxjournal.com/article/8361 本人英文水平有限,还请斟酌

如果不考虑价格,我全心全意的向你推荐HHKB pro. 这样一个精巧的键盘将会满足你的任何要求.

产品信息:

供应商:PFU
网址: http://www.pfusystems.com/hhkeyboard/hhkeyboard.html
价格: HHKB pro $269, HHKB lite $69
优点:

    • 出色的键盘手感.大按键为流畅的输入提供了便利.
    • 非常精简.
    • 可以通过DIP开关实现多种配置.

缺点:

    • 没有特定功能按键,这意味着实现一些按键需要 Fn组合键.

Happy Hacking Keyboard Professional(HHKB pro), 是一个有这USB接口和非凡手感的精简小键盘,它有一些非常有趣的功能同时售价不菲.它由PFU设计制造,也是富士通公司的一部分.

对于各各不同种类的键盘最重要的事情就是,它是怎么工作的? HHKB 的键数量少数一般的键盘,但是这些键都是你最经常使用的.当你轻触键盘而不是用力敲击的时候,你也会有很爽的感觉的.这种方法可以让我键指如飞.事实上,我希望我的全尺寸键盘也能有它的手感(难道他想要realforce 103)

早些时候,HHKB产品线中的键盘都是薄膜式的.但是这个HHKB pro有着圆锥弹簧系统,根据Happy Hacking官方网站介绍,这样的系统能使HHKB有更舒适的键入感和更长的寿命.

和许多笔记本电脑一样,HHKB pro有Fn键(for Function),Fn键可以和其他键组合出功能键(F1~F12)等,但是却没有单独提供这些功能键. HHKB pro 只有仅仅60个按键,没有单独的功能键,但是你可以用Fn-1这种方式来键入F1,用Fn-=键入F12,依此类推.这个键盘同样没有方向键,”上”,”下”,”左”,”右”分别用Fn-[,Fn-/,Fn-;,Fn-’来代替.

HHKB pro 的Esc和Ctrl在传统的位置(这个传统不是指现在的标准键盘,我理解是指,IBM 的PC和windows出现之前).现在在最长用的布局是104键布局,这种布局是在IBM在1986年发明的101键布局上建立的.104键布局在ASDF左边有一个Caps lock键,有两个Ctrl键在键盘下方对称的地方.HHKB Pro 只有一个Control在Caps lock的位置,Caps lock则由Fn-Tab来代替.104键布局的Esc离主键区有比较远的距离,在左上角. 而HHKB pro把Esc放在紧挨着Tab键和1键的地方.

HHKB pro 一组DIP开关,通过这个组开关,你可以让HHKB工作在你喜欢的方式.开关就在HHKB键盘的后面,上面还有一个小盖子.

通过选择SW1和SW2可以在以下3种模式切换:default or HHK 模式, HHK Lite 模式and Macintosh 模式,HHK 模式和 HHK Lite 模式之间的唯一区别就是,在HHK Lite模式下有一些额外的组合键可以使用.例如,你不可以在HHK 模式下使用Fn-Tab来代替Caps lock,但是在HHK Lite模式下面就是可以的.我看不出来HHK模式比HHK Lite模式的优势,所以我建议有HHKB pro的朋友,还是用HHK Lite模式.

在Return 键的上方就是有一个标着Delete的键.当SW3 DIP开关打开的时候,它就有Backspace的功能,而要是SW3关闭的时候,只有用Fn-Delete也能实现Backspace,Fn-`总是Delete键.

两个atl键被放置在空格的两边,它们上面也有菱形符号,它们也可以实现win键(windows)和command键( x)在普通的104键盘上.SW5是用来切换win键和alt键的,如果你经常用alt键,比如你经常用Emacs,你的atl键要是你的win键,你会可能会感觉更好,因为win键更大.更容易按下.

SW4开关的作用是控制左边的win键是否作为win键或者第二个Fn键.如果SW5打开, 左边的Alt键将作为win键,win键将作为Fn键.

最后的DIP 开关, SW6,是否是键盘具有能够让计算机进入睡眠状态的功能,Fn-Esc 能提供电源键的功能.我还没有测试这个功能.

HHKB pro 还有一套多媒体组合键: 音量减低,音量增加,静音和弹出光盘分别由对应Fn-A,Fn-S,Fn-D,Fn-F不过这些都是在macnitosh 模式下的,在其他的模式下面这些功能并不能使用.如果你想让多媒体组合和键生效,你可以尝试把键盘设置到macnitosh模式,并在mac系统的系统偏好设置中选择你的键盘类型.我已经试过了,并且再用. HHKB pro甚至可以产生和我的mac键盘一样多的多媒体键,所以,这两个键盘同时能够控制我的音量.

日常使用

当你第一次用HHKB pro的时候, 你第一件事就是发现没有方向键.当你需要方向键的时候,你只能用Fn-组合键来完成.更糟糕的是它们不是很明显,你需要抬起你的手找到他们,按下组合键,然后再回到你正常的输入中.不过当你用HHKB pro时间长了以后,你可能会学会不看并暗下方向键.但是这并没有有单独的方向键方便.

然而,linux是构建在UNIX传统之上的,同时UNIX有着为很多类型的键盘开发的命令行终端,所以Emacs和vi都是被设计成只支持标准的ASCll键位(不知道这两个东西的程序员,可以google).在我的大学时代,我用来写Pascal 程序的ADM3A终端甚至没有退格键, 当你想退格的时候,你必须使用Ctrl-H.如果你学过vi或者Emacs的快捷键, 你就可以找出相应的更好的按键来代替方向键,当然在linux系统中的很多程序也是用此类快捷键的.
我把我的命令行的方向键和退格等键,配置的和vi一样,并且我很快就适应了.

事实上,我很反对我以前一直没有把命令行设置成vi模式.因为我很擅长vi,用vi模式我可以更好的在命令行中编辑,并且我不用让手离开主键区,(F和J).如果你有闲暇时光去学习vi和Emacs的话,你同样可以把它们的按键方式用在命令行中.

如果你有一个笔记本电脑或者平板电脑,HHKB pro就是一个非常好的便携式键盘. 如果你要把HHKB pro装进包里, 我建议你把usb线缆从HHKB上都拔下来. HHKB pro 的连接线,是标准的A口对B口的USB链接线(大口转小口).

价格
不幸的是, HHKB pro非常贵. 网站上的报价为$269. 我在网上能够找到的最便宜的价格是$249.但是这个价格也远远超过我愿意为一个键盘付出的价格.
Happy Hacking keyboard Lite2, USB接口或者PS/2, 正常价格应该在$69.

结束
如果不谈价格, 我将全心全意的像你推荐 HHKB pro. 这个精巧的键盘可以给你你想要的一切. 当然, 你可以用它来编写文档并享受每个键帽给你带来的顺滑手感. 它绝对比我普通键盘好很多, 但是 它也是一般键盘的6倍以上的价格.

变质的奶酪,linux!

      我个人是一个linux爱好者,这种爱好,并不是让linux给我带来更丰厚的薪水,纯纯的爱好和喜欢.记得在大学的时候,有为牛人说linux不是给所有人准备的,直到现在我还是这样认为的,但是现在的情况呢?

      网络上总是在把ubuntu和win7比,我怎么就是不能理解呢?现在ubuntu怎么了?难道想和windows一样了么?现在的关于linux的中文资讯,有多少是关于ubuntu的?我的意思是关于桌面的(包括Fedrora和SUSE),真的有意义么?google的andorid也来,linux马上就要变质了,这是一种及其个人的说法!linux在我心中是一种具有反抗,自由精神的一种载体,但是现在,它”翅膀硬了”,当在利益面前这种精神能不能保持呢?我说这些仅仅是一个技术爱好者的思维,可能一个商业运作者觉的这是一种顺理成章的事情.

      首先我觉得,linux虽然是以GPL协议发布的,但是我总是觉得用linux赚钱还是有点邪恶的,包括”不作恶的”google.在我心中,linux应该是低调的,高效的,很有技术性的,linus开发linux的初衷就是爱好或者说是一种信仰,但是看看现在中国的linux使用者,他们中有些人会说:”看!我不用windows 我用linux 我用的是ubuntu,我能用linux看rmvb,能下载BT!”这些应该值得欣喜的,但是这些不用这样高调的,这是理所应当的.在我心中一直存在一种想法就是:”windows能干的事linux也能干,windows能干的事linux干不了的事就是不需要干的事!”当然在现在这种娱乐大众,炒作的风气之下,windows能干的事,linux原来干不了,现在能干了就是值得欣喜的事….我感到很可悲.对于linux甚至unix精神来说这就是一种蜕变!

      话说娱乐大众,windows和mac做的都是很不错的(一个同学的论点),linux原来不会娱乐大众,但是现在会了,ubuntu先会的接着就是Fedora,SUSE.linux在桌面领域那一位数的占有律说明,娱乐的还不够好!大众需要的是娱乐,不是愚弄!既然不擅长,就别跟风!最后落得个愚弄大众,自己得不偿失.

     我还是在想linux kernel的事,明白人都知道, 就是指kernel,并不是什么ubuntu,Fedora.对于商业的运作我真的不想考虑他们的感觉,我就是站在一个爱好者的角度或者说是传教士的角色,对初学linux的人和应用linux的人说:”对于内核,我们真应该好好看看了!” 中国人也是很强的!强!在我的理解并不是赚多少钱,看你能给人类带来多少贡献.至少,我们的大学里面,别整天学计算机基础的时候别老是教同学们一些word什么的,让一些非计算机专业的人只知道windows这个东西,让他们知道有linux,让他们知道自由,也让他们知道什么叫做版权!

     就说到这里吧,喝得有点多…..不好意思,文章很乱,思路也很奇怪,算了就这样了,我喜欢linux就是了,看看我今天吃了变质的奶酪以后,明天会不会拉肚子….

科技是一种信仰(apple&linux)

      这个题目有点大,并且有点geek.不过没关系,对我而言这句真的是很到位.如果大家在google中搜索”科技是一种信仰”的话,第一条就是《iwoz》的中文版序,介绍了和jobs一同创立了apple公司的事情,我也还没有看,就不多介绍了.好吧,让我们说说apple吧.

      今天恰好去了三里屯的apple store,给我的感觉,很有一种科技改变生活的感觉,哦,不对应该是apple改变生活.不过确实那里的店员会用一种朋友的身份给你分享apple改变他们生活的故事.我也和他们说了我和apple的故事(都是不光彩的,用了craked 的 iphone和Mac OS X).为我做体验指导的是一个在美国留过学的男生,他是学人工智能的,我们的话题总是落在unix上,别忘了Mac OS X就是BSD的一个变种.在将近一个小时的交流中,我深深的感觉了,apple的信仰,简约而不简单,简单意味着高效,生活本来可以更艺术的…最重要的就是:”选择多了并不是一件好事!”,说道这里,要提出Dexter.Yy 的论点:

 这“两个凡是”我很理解,你看,虽然mac是建立在大量开源软件和技术的基础之上,但它跟Linux是两个相反的极端:

Linux会给你提供无数的选择,强烈的参与感,让你和整个开源社区一起共同打造心目中的“未来操作系统”。同样的功能都有几个不同风格的项目供你选择,即使在一个软件里,比如Compiz Fusion,也会给你一大堆选项,让你定制出osx的效果,vista的效果,或是osx和vista都没有的效果。用图形界面改不出来,可以改文本形式的配置文件,配置文件里也没有,可以写脚本,脚本也实现不了,可以改源代码重新编译。还有无数的文档来支持你做这些事情………………firefox也很类似,我可以在一个光秃秃的浏览器上安装各种扩展,定制出一个符合自己需求的网络平台……

而mac只给你一个选择(不是指软件),它明白无误的让你感觉到:这就是“未来的操作系统”。虽然它提供了完善的unix命令行工具(osx10.5是标准的UNIX系统, Linux都只能算unix like)和开发工具(这些工具的强大我难以形容,只能截图),自带了ruby,python,php这样的开源语言,只要你有深入的了解,一样可以控制系统的大部分,但归根结底,它为了给大众用户最方便最简洁的体验,实际上是封装了刚才说的那些东西,把强大的技术隐藏在华丽的图形界面之后。“设计”和 “整合”,这就是apple最擅长的事情。

你可以自己定制,安装各种新东西,却总是觉得自己很笨拙,生怕打乱整个系统的和谐和完美(没有linux上那种自由自在,搞砸事情也不怕的感觉),你可以创作出各种界面,却就是觉得比不上cocoa的原生界面(cocoa是osx的GUI库),那种简洁,高效,细致,优雅,让你除了学习和模仿之外完全没有别的想法。很多人可能看不出来,现在web上流行的一些设计风格和元素,都是从osx里模仿来的。apple的作品几乎从没让你失望过,apple提供的选择虽然少,但几乎就是最好的选择,用mac的过程实际上是不断的在强化这种感觉。所以难免会产生“两个凡是”的思维定式。还有一个例子是:比较一下 windows软件的界面,各种风格都有,就算外观上接近windows的原生界面,面板的布局,按钮位置也可能完全不同。形成鲜明对比的是,mac上的软件(先声明,mac软件的数量不少)几乎都有一致的界面和用户体验,因为mac平台的开发者都谨守apple的GUI规范和建议

我没有说绝对自由是最好的,也不认为应该让一个强势的偶像级的独裁者给你提供唯一的最好的选择。linux和osx都是能让我感受到未来的科技产品,在两者间做取舍时,我其实是抱着很务实的态度:在现阶段,osx要更优秀更成熟,而且我需要的是能提高效率提高生活质量的工具,而不是把精力和时间消耗在操作系统本身,我既希望享受到开源技术的好处,又不想为此浪费太多时间,所以我用mac……

不用我多说了吧? 我也算一个linux开发者,同时用过linux和mac开发,我只能说我和他的感觉差不多,但我不否定linux的成功,这就是我所谓的信仰,有点感觉了么?让我们暂且认为Mac OS X是一个unix来引出下面的话:

is simple. It just takes a genius to understand its simplicity.
                                                                                       — Dennis Ritchie 

当然用mac不需要很多的genius但是并不是说你不需要你的创意.这些就是我对apple和linux的信仰,但是有一句话:”信仰自由!”对于那些windows user&PC你们也有你们的信仰,这些同样在改变你的生活.但是还有一句:”有信仰自由,同样有不信仰的自由!”,我就是不信仰windows,在以后的文章里我说不定会说一些很过激的话,请windows 爱好者斟酌是否再来本博,谢谢.

linux环境编程之进程间通信(消息队列)

/**************************************************************
* name : server.c                          *
* author : cyher                          *
* date : 2008-8-6                          *
* description : 服务端进程向消息队列里面放消息传给客户端     *
**************************************************************/
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
#include <time.h>

struct msgbuf/*消息队列结构*/
{
long mtype;
char mtext[256];
};

int
init_daemon(void);/*守护进程启动函数*/

int
main()
{
key_t key;
int msgid;
char *p;
time_t t;
struct msgbuf msg= {100,”"};/*设置消息的id为100*/
key = ftok(“/home/cyher/workspace/c/star”,’s');/*产生一个key*/
msgid = msgget(key,IPC_CREAT | 0666);/*产生一个ipc标识*/
if(msgid == -1)
{
perror(“msgget”);
exit(1);
}

init_daemon();/*守护进程创建*/
while(1)/*进入循环执行*/
{
t = time(NULL);
p = asctime(localtime(&t));
strcpy(msg.mtext,p);/*把时间字符放入msg.mtext*/
msgsnd(msgid,&msg,strlen(msg.mtext)+1,IPC_NOWAIT);/*放入消息队列无阻塞*/
sleep(2);
}

}

/**************************************************************
* name : client.c                          *
* author : cyher                          *
* date : 2008-8-6                          *
* description : 客户端进程从消息队列里面取消息打印到屏幕上   *
**************************************************************/
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
#include <time.h>

struct msgbuf
{
long mtype;
char mtext[256];
};

int
main()
{
key_t key;
int msgid;
struct msgbuf msg;
key = ftok(“/home/cyher/workspace/c/star”,’s');
msgid = msgget(key,IPC_CREAT | 0666);
if(msgid == -1)
{
perror(“msgget”);
exit(1);
}

while(1)
{
if(msgrcv(msgid,&msg,256,100,IPC_NOWAIT) == -1)
{
perror(“msgrcv:”);
}
printf(“%s”,msg.mtext);
memset(&msg,0,sizeof(struct msgbuf));
sleep(2);
}

}

/*******************************
* name:init_daemon.c
* author:cyher
* date:2008-8-1
* description:initialize a daemon process
* */

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>

int
init_daemon()
{
int pid;
int i;
if( (pid=fork())<0 )
{
perror(“fork”);
exit(1);
}
else if(pid > 0) //是父进程就退出
{
exit(0);
}

if((pid=fork()) < 0)
{
perror(“fork2″);
exit(1);
}
else if (pid > 0)//是第一子进程也退出
{
exit(0);
}
//
//下面都是第二子进程运行
sleep(2);
setsid();//使子进程脱离父进程的关系,把父进程的信息改掉
//脱离终端的控制
//
for(i=0;i<1024;i++)//关闭文件描述符,节省资源
close(i);
chdir(“/tmp”);//改变工作目录
umask(0);//重设掩码,使程序工作顺畅

return 0;

}

About

You are currently browsing the Cyher.NET weblog archives for 'linux' tag.