linux守护进程的输出问题
#include<stdio.h>#include<time.h>#include<unistd.h>#include<signal.h>#include<sys/par...
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <signal.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
void init_daemon(void);
int main()
{
int hour,min;
time_t timep;
struct tm *p;
FILE *fp;
time (&timep);
p=localtime(&timep);/*获取系统时间*/
printf("这是一个闹钟程序,输入你想要设定的时间:\n");
scanf("%d:%d",&hour,&min);
init_daemon(); /*调用守护进程*/
while(1)
{
sleep(20);/*每隔20秒检查一下时间是否已到*/
if(p->tm_hour==hour &&p->tm_min==min)
{
fopen("tip.log",fp);
fputs("时间到了!\n",fp);
fputs("\7\7\7\7\7",fp);/*到了发出5声蜂鸣,作为提示*/
break;
}
}
}
void init_daemon(void)/*这是守护进程*/
{
pid_t child1,child2;
int i;
child1=fork();
if(child1>0)
exit(0);
else
if(child1< 0)
{
perror("创建子进程失败");
exit(1);
}
setsid();
umask(0);
for(i=0;i< NOFILE;++i)
close(i);
return;
}
确实产生了一个tip.log在当前目录,但是为什么fputs的内容不见了 展开
#include <time.h>
#include <unistd.h>
#include <signal.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
void init_daemon(void);
int main()
{
int hour,min;
time_t timep;
struct tm *p;
FILE *fp;
time (&timep);
p=localtime(&timep);/*获取系统时间*/
printf("这是一个闹钟程序,输入你想要设定的时间:\n");
scanf("%d:%d",&hour,&min);
init_daemon(); /*调用守护进程*/
while(1)
{
sleep(20);/*每隔20秒检查一下时间是否已到*/
if(p->tm_hour==hour &&p->tm_min==min)
{
fopen("tip.log",fp);
fputs("时间到了!\n",fp);
fputs("\7\7\7\7\7",fp);/*到了发出5声蜂鸣,作为提示*/
break;
}
}
}
void init_daemon(void)/*这是守护进程*/
{
pid_t child1,child2;
int i;
child1=fork();
if(child1>0)
exit(0);
else
if(child1< 0)
{
perror("创建子进程失败");
exit(1);
}
setsid();
umask(0);
for(i=0;i< NOFILE;++i)
close(i);
return;
}
确实产生了一个tip.log在当前目录,但是为什么fputs的内容不见了 展开
1个回答
展开全部
你好,看了你的代码,我猜测你也做了不少努力,搜索了不少资料。
为了解决你的问题,我也这样做了。
我把我修改后的代码,和参考的文档放在附件里。
你代码有3个关键错误:
获取系统时间,应当放在while中,否则,你的闹钟“停摆”。
while这个大循环应该在daemon中,而不是主函数中。
因为init_daemon函数执行后,父进程会退出,主函数的部分代码就不会执行,而while在主函数中。
close(i); 你调用循环把所有文件句柄都关闭了,导致不能写文件。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询