c语言 进程间信号,C语言实现简单的守护进程及信号处理

#include #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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值