该实例首先建立了一个守护进程,然后让该守护进程每隔5s在"/tmp/dameon.log"中写入一句话。
/*"dameon.c"创建守护进程实例*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>
#define MAXFILE 65535
int main(){
pid_t pc;
int i,fd,len;
char *buf="This is a Dameon/n";
len = strlen(buf);
pc=fork(); //父进程退出
if(pc<0){
printf("error fork/n");
exit(1);
}else if(pc>0)
exit(0);
setsid(); //在子进程中创建
chdir("/"); //改变当前目录为根目录
umask(0); //重设文件权限掩码
for(i=0;i<MAXFILE;i++) //关闭文件描述符
close(i);
while(1){ //这是创建完守护进程,一下开始正式进入守护进程工作
if((fd=open("/tmp/dameon.log",O_CREAT | O_WRONLY | O_APPEND,0600)) < 0){
perror("open");
exit(1);
}
write(fd,buf,len+1);
close(fd);
sleep(5);
}
}
将该程序下载到开发板中,可以看到该程序每隔5s就会在对应的文件中输入相关内容,并且使用ps可以看到该进程在后台运行,如下所示:
[root@(none) 1]# tail -f /tmp/dameon.log
This is a Dameon
This is a Dameon
This is a Dameon
This is a Dameon
This is a Dameon
、、、、、、
[root@(none) 1]# ps -ef|grep daemon
76 root 1272 S ./daemon
85 root 1520 S grep daemon
实例2:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>
int main()
{
pid_t pid;
int i,fd;
char *buf = "This is a Damon/n";
pid = fork(); //创建子进程,并退出父进程
if(pid<0)
{
printf("Error fork/n");
exit(1);
}
else if(pid > 0)
{
exit(0);
}
setsid(); //创建新会话
chdir("/"); //设置工作目录
umask(0); //重设文件权限掩码
for(i = 0;i < getdtablesize(); i++) //关闭文件描述符
{
close(i);
}
if((fd = open("/tmp/daemon.log",O_CREAT|O_WRONLY|O_APPEND,0600))<0) //创建完守护进程,以下开始正式进入守护进程工作
{
printf("Open file error/n");
exit(1);
}
while(1)
{
write(fd,buf,strlen(buf)+1);
sleep(1);
}
close(fd);
exit(0);
}