跳至主要内容

博文

目前显示的是 七月 12, 2009的博文

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("hello\n");    pid = fork();   switch (pid) {      case -1: printf("failure!\n"); break;      case  0: printf("I am child!\n"); break;      default: printf("my child is %d\n",pid); brea