我有服务器程序,用C++写的.我通常是这样开始的

db_net 2> log_file

我没有使用任何关于日志(log)记录的特殊内容,只是在stderr上打印.

但是,有时候,日志(log)文件会变得很大.如果我这么做了

echo > log_file

它没有效果,文件不会尖叫到零.我知道这在10年前很管用,但现在不行了.

问题如下:

  • 是否可以从操作系统端以某种方式修复此问题(我在Linux上运行),而无需重新启动应用程序
  • 如果无法从操作系统修复,我可以从应用程序修复吗?我可以关闭和打开stderr,但我不知道stderr指向的文件名,因为它被重定向.C解决方案也是可以的.

我知道MySQL在flush logs;下可以做到这一点,而apache/nginx也可以做到这一点,但是他们知道文件名,而且在他们的情况下很容易重新打开.

我知道我可以在配置中实现日志(log)文件,但目前我正在寻找快速的解决方案.

文件系统是XFS.

推荐答案

使用附加模式:

db_net 2>> log_file

现在,当您手动截断文件时,该过程将继续追加到新的空文件.

C++相关问答推荐

是否定义了数组指针类型转换为指针类型?""""

为什么写入系统调用打印的字符数不正确?

exit(EXIT_FAILURE):Tcl C API类似功能

C/SDL程序,渲染不使用我的渲染器

在struct中调用函数,但struct在void中 *

将 struct 变量赋给自身(通过指针取消引用)是否定义了行为?

C中的指针增量和减量(*--*++p)

如何在C中使printf不刷新标准输出?

C在声明带有值的数组时,声明大小有用吗?

为什么我不能只在内存地址中添加一个int来寻址任何数组?

如何读取文件并将内容保存在字符串中?(在C语言中,没有崩溃或核心转储错误)

在vfork()之后,链接器如何在不 destruct 父内存的情况下解析execve()?

当内存来自Malloc时,将char*转换为另一个指针类型是否违反了严格的别名规则?

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

对于STM32微控制器,全局偏移表.get和.Got.plt必须为零初始化

解密Chrome加密密钥

在C中打印指针本身

在同一范围内对具有相同类型的变量执行的相同操作在同一C代码中花费的时间不同

Ubuntu编译:C中的文件格式无法识别错误

为什么程序在打印每个数字之前要等待所有输入?