/*如果你在 DOS 时代编写过程序,那么你也许知道在 DOS 下为了编写一个常驻内存的
程序我们要编写多少代码了.相反如果在 Linux 下编写一个"常驻内存"的程序却是很容易的.
我们只要几行代码就可以做到. 实际上由于 Linux 是多任务操作系统,我们就是不编写代码
也可以把一个程序放到后台去执行的.我们只要在命令后面加上&符号 SHELL 就会把我们的
程序放到后台去运行的. 这里我们"开发"一个后台检查邮件的程序.这个程序每个一个指
定的时间回去检查我们的邮箱,如果发现我们有邮件了,会不断的报警(通过机箱上的小喇
叭来发出声音). 后面有这个函数的加强版本加强版本
后台进程的创建思想: 首先父进程创建一个子进程.然后子进程杀死父进程(是不是很无
情?). 信号处理所有的工作由子进程来处理
程序功能,检测邮件,并提示新邮件,邮件路径:/var/spool/mail/root*/
1 #include <unistd.h>
2 #include <sys/types.h>
3 #include <sys/stat.h>
4 #include <stdio.h>
5 #include <errno.h>
6 #include <fcntl.h>
7 #include <signal.h>
8 #include <stdlib.h>
9 #define MAIL "/var/spool/mail/root"/*linux default email address is /var/spool/mail/userName*/
10 #define SLEEP_TIME 1
11 main(void)
12 {
13 pid_t child;
14 if((child=fork())==-1)
15 {
16 printf("Fork Error: %s/n",strerror(errno));
17 exit(1);
18 }
19 else if (child >= 0)
20 while(1);
21 if(kill(getppid(),SIGTERM)==-1)/*杀死父进程,否则不能常驻内存,*/
22 {
23 printf("Kill Parent Error: %s/n",strerror(errno));
24 exit(1);
25 }
26 {
27 int mailfd;
28 while(1)
29 {
30 if((mailfd=open(MAIL,O_RDONLY))!=-1)
31 {
32 fprintf(stderr,"%s","/007");
33 close(mailfd);
34 }
35 sleep(SLEEP_TIME);
36 }
37 }
38 }