预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共28页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

[永远的UNIX>UNIX环境下如何应用消息队列实现进程间通信]_LyGroup开...页码,1/28 热烈祝贺考试168网(www.exam168.com)结盟中国公司网(www.GongSiWang.com) 免费格子系统创业管理学院嵌入式自动化编程/软件工程爱国教育学院考试资料下载 做调查免费获iPod经典手机非凡音乐体验值得信赖的笔记本品牌私人珍藏- 每位参加安全调查用户将有索尼爱立信音乐手机,让优质优价,竭诚服务戴明星写真, 机会免费获得iPod你和音乐一起飞翔尔笔记本等你拿网络电子杂 栏目导职业财富:『个人简历』※『管理资料』※创业技巧集毕业论文 航:论文:教育教学论文各种日常论文下载各种考试 技术:控制系统PLC技术机器人爱好者嵌入式系统计算机技术 技能:英语学习健康人生社会万象娱乐休闲读万卷书爱我中华 Flash-视频-休闲 中国公司网创业成功的摇篮精确搜 标题所有栏目 索:请输入关键字 您的位置:首页->计算机技术 ->IT新技术->[永远的UNIX>UNIX环境下如何应用消息队列实现进程间通信] 上一篇:[永远的UNIX>UNIX环境下如何⋯下一篇:[永远的UNIX>编写关于SendM⋯ [永远的UNIX>UNIX环境下如何应用消息队列实现进程间⋯ 作者未知摘自未知发表2005-12-190:14:55人气189视力保护色 [永远的UNIX::UNIX技术资料的宝库 ] 首页>编程技术>其它>正文 UNIX系统的文件信号灯机制 本文出自:作者:(2001-07-0619:00:01) ---作为一个多用户、多任务的操作系统,UNIX允许某个程序同时运行多个进程。但有 资源等因素的制约,要求一次只能有一个进程在运行。例如在DigitalUNIX下运行第二 时,系统报告如下错误信息: ----Netscapehasdetecteda/.netscape/lockfile. ----ThismayindicatethatanotheruserisrunningNetscapeusingyour/.netscapefiles. ----实际上,第一个Netscape进程在运行时,加了一把锁,禁止其他Netscape进程启动。当 锁打开,其他进程才能进入。这就是UNIX的信号灯机制。 ----而Netscape是用文件作为信号灯的。在运行前,先检查文件/.netscape/lock是否存在: 锁已挂上,新进程不能运行,只好等待;若没有,说明锁已打开,可以运行了。 ----在掌握了文件信号灯的机理后,可以自行设计一套万能加锁解锁程序,为每个 的锁和钥匙。并且使用零字节长度的文件当锁,减少系统开销。 ----我们用creat和unlink两个系统调用实现加解锁和检测操作。一个进程运行之前,先 锁文件是否存在注1。unlink系统调用从一个目录中删去一个文件链,若成功则返回0, 存在;若失败,表明文件不存在,返回-1。如果还没有上锁,就要用creat系统调用创建 已挂上,虽然进程并未运行,但unlink无疑会删除锁文件,所以也要用creat来恢复。cr http://www.exam168.com/chinese/Article.asp?articleid=480532006-5-30 [永远的UNIX>UNIX环境下如何应用消息队列实现进程间通信]_LyGroup开...页码,2/28 建一个新文件,函数标题如下: intcreat(path,perms)/*createfile*/ char*path;/*pathname*/ intperms;/*permissionbits*/ ----其中path表示路径加文件名,perms是10位的文件权限描述字,在加锁程序中取0。文 时,初始长度为零字节,用它来做锁文件,可以最大限度地降低系统开销。 ----锁文件规定为:源文件名+“.lok”。这样一来,就真正做到了一个程序配一把锁。 ----下面就列出加锁和解锁的程序清单。我们用同样的程序完成这两种完全互斥的 于命令名的不同。在C语言源程序里,变量argv[0]表示命令名,“lockf”是上锁,“unlockf 程序LOCKF.C暨UNLOCKF.C的源代码 #include<stdio.h> #include<errno.h> #include<fcntl.h> #include<cdatyp.h> voidsyserr(msg)/*打印系统调用错误信息并中止*/ char*msg; { externinterrno,sys_nerr; externchar*sys_errlist[]; fprintf(stderr,"ERROR:%s(%d",msg,errno