Linux程式设计入门-fork,pthread,and signals1.doc_第1页
Linux程式设计入门-fork,pthread,and signals1.doc_第2页
Linux程式设计入门-fork,pthread,and signals1.doc_第3页
Linux程式设计入门-fork,pthread,and signals1.doc_第4页
Linux程式设计入门-fork,pthread,and signals1.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux程式设计入门-fork,pthread,and signals作者:未知 文章来源:中国学习联盟 点击数: 169 更新时间:2005-6-7【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 Linux程式设计入门 - fork, pthread, and signals 在UNIX程式设计中,学会fork及signal的运用,算是相当基本的功夫。 fork()及signal经常运用在daemon守护神这一类常驻程式,另外像 a4c.tty/yact/chdrv这些中文终端机程式也有用到,一般如 Mozilla/Apache/Squid等大程式几乎都一定会用到。 虽然在UNIX下的程式写作,对thread的功能需求并非很大,但thread在现代的 作业系统中,几乎都已经存在了。pthread是Linux上的thread函数库,如果您 要在Linux下撰写多线程式,例如MP3播放程式,熟悉pthread的用法是必要的。 pthread及signal都可以用一大章来讨论。在这里,我只谈及最简单及常用的技 巧,当您熟悉这些基本技巧的运用後,再找一些专门深入探讨pthread及signal 程式写作的书籍来研究。这些进阶的写法,用到的机会较少,将层次分明,学 习速度应该会比较快。 程序分歧fork() fork()会产生一个与父程序相同的子程序,唯一不同之处在於其process id(pid)。 如果我们要撰写守护神程式,或是例如网路伺服器,需要多个行程来同时提供 多个连线,可以利用fork()来产生多个相同的行程。 函数宣告 pid_t fork(void); pid_t vfork(void); 返回值: -1 : 失败。 0 : 子程序。 0 : 将子程序的process id传回给父程序。 在Linux下fork()及vfork()是相同的东西。 范例一: fork.c 在这个范例中,我们示范fork()的标准用法。 #include #include #include void main(void) pid_t pid; printf(hellon); pid = fork(); switch (pid) case -1: printf(failure!n); break; case 0: printf(I am child!n); break; default: printf(my child is %dn,pid); break; for (;) /* do something here */ 编译: gcc -o ex1 fork.c 执行结果: ./ex1 & hello my child is 8650 I am child! 我们可以见到,使用fork(),可将一个程式分岐成两个。在分歧之前的程式码 只执行一次。 检验行程: ps | grep ex1 8649 p0 R 0:40 ./ex1 8650 p0 R 0:40 ./ex1 8649是父程序的pid,8650则为子程序的pid。 您会需要用到killall ex1来杀掉两个行程。 范例二: daemon.c 在UNIX中,我们一般都利用fork(),来实作所谓的守护神程式,也就是DOS中 所谓的常驻程式。一般的技巧是将父程序结束,而子程序便成为守护神。 这个范例中,示范一般标准的daemon写法。 #include #include #include void main(void) pid_t pid; pid = fork(); if (pid0) printf(daemon on duty!n); exit(0); else if (pid0) printf(Cant fork!n); exit(-1); for (;) printf(I am the daemon!n); sleep(3); /* do something your own here */ 编译: gcc -o ex2 daemon.c 执行结果: ./ex2 daemon on duty! I am the daemon! 接下来每三秒钟,都会出现一个I am the daemon!的讯息,这表示您的程式 已经长驻在系统中了。 检验行程: ps | grep ex2 8753 p0 S 0:00 ./ex2 注意到在范例一中,我们下的指令为./ex1 &,而在范例二中为./ex2,没 有&符号。 范例三: lock.c 许多的时候,我们希望守护神在系统中只有一个,这时候会需要用到pid lock的技巧。如果您注意到/var/run目录中的内容,您会发现到有许多的*.pid 档,观看其内容都是一些数字,这些数字其实就是该行程的pid。 #include

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论