所以我有一个运行在Linux系统上的守护进程,我想记录它的活动:一个日志(log).问题是,实现这一目标的"最佳"方式是什么?

我的第一个 idea 是简单地打开一个文件并写入它.

FILE* log = fopen("logfile.log", "w");
/* daemon works...needs to write to log */
fprintf(log, "foo%s\n", (char*)bar);
/* ...all done, close the file */
fclose(log);

用这种方式记录有什么内在的错误吗?有没有更好的方法,比如在Linux中内置一些框架?

推荐答案

Unix有一个名为syslog的特殊日志(log)框架已经有很长一段时间了.输入你的shell

man 3 syslog

你会得到它的C接口的帮助.

Some examples

#include <stdio.h>
#include <unistd.h>
#include <syslog.h>

int main(void) {

 openlog("slog", LOG_PID|LOG_CONS, LOG_USER);
 syslog(LOG_INFO, "A different kind of Hello world ... ");
 closelog();

 return 0;
}

C++相关问答推荐

VS代码输入需要多次

代码打印正确输出次数过多(CS50)

初始化char数组-用于初始化数组的字符串是否除了存储数组的位置之外单独存储在内存中

librsvg rsvg_handle_get_dimensions获取像素大小与浏览器中的渲染大小没有不同

如果包含路径不存在,我的编译器可以被配置为出错吗?(GCC、MSVC)

判断X宏的空性

如何在CANbus RX/TX FIFO起始地址寄存器(ATSAME 51)的特定地址初始化数组?

在句子中转换单词的问题

是否需要包括<;errno.h>;才能使用perror?

GCC奇怪的行为,有fork 和印花,有换行符和不换行符

C整型和_泛型.哪些类型是兼容的?

GCC错误,共享内存未定义引用?

将 struct 数组写入二进制文件时发生Valgrind错误

错误:字符串在C中获得意外输出

用C++初始化局部数组变量

将size_t分配给off_t会产生符号转换错误

如何使crc32的结果与cksum匹配?

使用 strtok 多次分割一个字符串会导致意外行为

C 程序不显示任何输出,但它接受 CS50 Lab1 的输入问题

System V 消息队列由于某种原因定期重置