Linux程式设计入门forkpthreadand signals1.docx

上传人:b****3 文档编号:3515903 上传时间:2022-11-23 格式:DOCX 页数:12 大小:17.52KB
下载 相关 举报
Linux程式设计入门forkpthreadand signals1.docx_第1页
第1页 / 共12页
Linux程式设计入门forkpthreadand signals1.docx_第2页
第2页 / 共12页
Linux程式设计入门forkpthreadand signals1.docx_第3页
第3页 / 共12页
Linux程式设计入门forkpthreadand signals1.docx_第4页
第4页 / 共12页
Linux程式设计入门forkpthreadand signals1.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Linux程式设计入门forkpthreadand signals1.docx

《Linux程式设计入门forkpthreadand signals1.docx》由会员分享,可在线阅读,更多相关《Linux程式设计入门forkpthreadand signals1.docx(12页珍藏版)》请在冰豆网上搜索。

Linux程式设计入门forkpthreadand signals1.docx

Linux程式设计入门forkpthreadandsignals1

Linux程式设计入门-fork,pthread,andsignals

作者:

未知文章来源:

中国学习联盟点击数:

169更新时间:

2005-6-7

【字体:

小大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】

Linux程式设计入门-fork,pthread,andsignals

在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_tfork(void);

pid_tvfork(void);

返回值:

-1:

失败。

0:

子程序。

>0:

将子程序的processid传回给父程序。

在Linux下fork()及vfork()是相同的东西。

范例一:

fork.c

在这个范例中,我们示范fork()的标准用法。

#include

#include

#include

voidmain(void)

{

pid_tpid;

printf("hello\n");

pid=fork();

switch(pid){

case-1:

printf("failure!

\n");break;

case0:

printf("Iamchild!

\n");break;

default:

printf("mychildis%d\n",pid);break;

}

for(;;){/*dosomethinghere*/}

}

编译:

gcc-oex1fork.c

执行结果:

./ex1&

hello

mychildis8650

Iamchild!

我们可以见到,使用fork(),可将一个程式分岐成两个。

在分歧之前的程式码

只执行一次。

检验行程:

ps|grepex1

8649p0R0:

40./ex1

8650p0R0:

40./ex1

8649是父程序的pid,8650则为子程序的pid。

您会需要用到"killallex1"来杀掉两个行程。

范例二:

daemon.c

在UNIX中,我们一般都利用fork(),来实作所谓的"守护神程式",也就是DOS中

所谓的"常驻程式"。

一般的技巧是将父程序结束,而子程序便成为"守护神"。

这个范例中,示范一般标准的daemon写法。

#include

#include

#include

voidmain(void)

{

pid_tpid;

pid=fork();

if(pid>0){

printf("daemononduty!

\n");

exit(0);

}else

if(pid<0){

printf("Can'tfork!

\n");

exit(-1);

}

for(;;){

printf("Iamthedaemon!

\n");

sleep(3);

/*dosomethingyourownhere*/

}

}

编译:

gcc-oex2daemon.c

执行结果:

./ex2

daemononduty!

Iamthedaemon!

接下来每三秒钟,都会出现一个"Iamthedaemon!

"的讯息,这表示您的程式

已经"长驻"在系统中了。

检验行程:

ps|grepex2

8753p0S0:

00./ex2

注意到在范例一中,我们下的指令为"./ex1&",而在范例二中为"./ex2",没

有"&"符号。

范例三:

lock.c

许多的时候,我们希望"守护神"在系统中只有一个,这时候会需要用到pid

lock的技巧。

如果您注意到/var/run目录中的内容,您会发现到有许多的*.pid

档,观看其内容都是一些数字,这些数字其实就是该行程的pid。

#include

#include

#include

voidmain(void)

{

FILE*fp;

pid_tpid;

exit(-1);

}

act.sa_handler=quit;

act.sa_flags=0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1