小结:使用fputs()向文件写入数据,要想实时看到结果,需要使用fflush清空缓冲区
/* * 题目:编写一个守护进程,每隔3秒钟将当前时间写入文件time.log, * 要求:不能使用init_daemon系统调用。 * */#include#include #include #include #include #include #include #include void gettime_now(char *ptime){ time_t tdata = 0; //获取当前系统时间 time(&tdata); //定义时间结构体变量 struct tm *eventtime = NULL; //将time_t类型转成struct tm指针类型 eventtime = localtime(&tdata); //tm_year表示年份,从1900开始 int t_year = eventtime->tm_year + 1900; //月份,月份从0开始 int t_mon = eventtime->tm_mon + 1; //日 int t_day = eventtime->tm_mday; //小时 int t_hour = eventtime->tm_hour; //分 int t_min = eventtime->tm_min; //秒 int t_sec = eventtime->tm_sec; sprintf(ptime, "%d-%d-%d %d:%d:%d\n", t_year, t_mon, t_day, t_hour, t_min, t_sec);}int main(void){ pid_t pid = fork(); if (pid == -1) { perror("fork() err"); return -1; } if (pid == 0) { //创建新的会话期 setsid(); //设置当前目录为根目录 chdir("/"); //设置目录权限 umask(0); close(STDERR_FILENO); close(STDIN_FILENO); FILE *pfa = NULL; pfa = fopen("/home/test/1/time.log", "a"); if (pfa == NULL) { perror("fopen() err"); return -1; } //每隔3秒 int seconds = 0; while (1) { seconds = 3; do { seconds = sleep(seconds); } while (seconds > 0); //获取当前时间 char timearr[50] = { 0 }; gettime_now(timearr); strcat(timearr," \t\t打印时间\n\n"); printf("%s",timearr); //写入文件 fputs(timearr, pfa); //刷新缓冲区 fflush(pfa); } } else if (pid > 0) { exit(0); } return -1;}
.SUFFIXES:.c .oCC=gccSRCS=hello.cOBJS=$(SRCS:.c=.o)EXEC=serSRCS1=tec01.cOBJS1=$(SRCS1:.c=.o)EXEC1=cltstart:$(OBJS) $(OBJS1) $(CC) -o $(EXEC) $(OBJS) $(CC) -o $(EXEC1) $(OBJS1) @echo "^_^-----OK------^_^".c.o: $(CC) -Wall -g -o $@ -c $