C语言实现简单的守护进程及信号处理
来源:互联网 发布:商业数据分析师知乎 编辑:程序博客网 时间:2024/04/19 13:27
C语言实现的一个比较简单的守护进程、信号处理及具名管道与守护进程通信的例子
daemon.h
#ifndef DAEMON_H_#define DAEMON_H_void write_log(char *); void set_daemon(void);void signal_handler(int);void listen_fifo();#endif
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <errno.h>#include <sys/stat.h>#include <time.h>#include <fcntl.h>#include <unistd.h>#include <signal.h>#include "daemon.h"const char *filename = "/home/solariens/Documents/C/err.log";const char *fifo_path = "/home/solariens/Documents/C/fifo";void write_log(char *error) { time_t date_time; time(&date_time); struct tm *date = localtime(&date_time); int year = date->tm_year; int month = date->tm_mon; int day = date->tm_mday; int hour = date->tm_hour; int min = date->tm_min; int sec = date->tm_sec; char str_date[1000]; memset(str_date, 0, strlen(str_date)); sprintf(str_date, "[date:%04d-%02d-%02d %02d:%02d:%02d] [err_msg:%s] \n", year, month, day, hour, min, sec, error); FILE *fp = fopen(filename, "a"); fwrite(str_date, 1, strlen(str_date), fp); fclose(fp);}void set_daemon() { pid_t pid = fork(); if (pid < 0) { write_log(strerror(errno)); exit(0); } else if (pid > 0) { exit(0); } else { setsid(); chdir("/"); umask(0); close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); }}void signal_handler(int signo) { switch(signo) { case SIGINT : listen_fifo(); break; }}void listen_fifo() { int fd = open(fifo_path, O_RDONLY); if (fd == -1) { write_log(strerror(errno)); exit(0); } char buf[1000]; memset(buf, 0, sizeof(buf)); if((read(fd, buf, sizeof(buf))) > 0) { int len = strlen(buf); if (buf[len - 1] == '\n') { buf[len - 1] = 0; } write_log(buf); }}
main.c
#include <stdio.h>#include <signal.h>#include <unistd.h>#include "daemon.h"int main() { set_daemon(); signal(SIGINT, signal_handler); while(1) { sleep(1); } return 0;}
0 0
- C语言实现简单的守护进程及信号处理
- Linux守护进程实现 (C语言)
- 守护进程C实现简单分析
- python daemon 守护进程对信号的处理
- 守护进程简单实现
- 守护进程简单实现
- 守护进程及实现
- 守护进程c实现
- 守护进程的最简单实现方法
- Windows守护进程的一种简单实现
- Windows守护进程的一种简单实现
- 介绍并实现简单的守护进程
- php实现简单的守护进程
- c语言进程池的简单实现
- Linux信号处理和守护进程
- 如何用php语言实现实时消息处理的后台守护进程
- c语言之--守护进程
- Linux下用C语言实现守护进程
- 父与子元素的背景色设置
- SQL练习50题整理
- 包含min函数的栈
- jquery $(document).ready() 与window.onload的区别
- 无法复制和rename ASM磁盘组上的数据文件处理方法
- C语言实现简单的守护进程及信号处理
- java多线程 Thread 2
- Android内存泄漏的八种可能
- 基于java的MySql的备份与恢复(二)
- OpenJudge 迷宫问题 BFS
- ob_start与ob_get_contents用法
- 线程概述
- 手把手带你走进MVP +Dagger2 + DataBinding+ Rxjava+Retrofit 的世界
- Springmvc+Spring+Hibernate中@Valid的使用