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的内容不见了
展开
 我来答
hixtao
2015-09-03 · TA获得超过1099个赞
知道小有建树答主
回答量:468
采纳率:85%
帮助的人:325万
展开全部

你好,看了你的代码,我猜测你也做了不少努力,搜索了不少资料。

为了解决你的问题,我也这样做了。

我把我修改后的代码,和参考的文档放在附件里。


你代码有3个关键错误:

  1. 获取系统时间,应当放在while中,否则,你的闹钟“停摆”。

  2. while这个大循环应该在daemon中,而不是主函数中。

    因为init_daemon函数执行后,父进程会退出,主函数的部分代码就不会执行,而while在主函数中。

  3. close(i); 你调用循环把所有文件句柄都关闭了,导致不能写文件。


推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式