根据大小重命名和移动我的文件在 c 中并不总是有效。为什么?
Renaming & moving my file based on the size is not always working in c. Why?
我有一个用 C 编写的应用程序,它生成各种数据参数,我正在将这些参数登录到名为 debug_log.txt 的文本文件中。每当此日志文件达到 1 MB 时,我都会使用时间戳 ex debug_log_20200106_133000.txt 重命名文件名并将其移动到同一目录中。然后我将重新打开 debug_log.txt 以记录新参数。
if(stat("/home/log/debug_log.txt", &statFiledbg) == 0)
{
if(statFiledbg.st_size >= 1048576) // 1MB
{
current_time = time(0);
strftime(time_buffer, sizeof(time_buffer), "%Y%m%d_%H-%M-%S", gmtime(¤t_time));
sprintf(strSysCmddbg, "mv /home/log/debug_log.txt /home/log/debug_log%s.txt", time_buffer);
system(strSysCmddbg);
fp_dbglog = freopen("/home/log/debug_log.txt", "w", fp_dbglog);
}
}
该代码大部分时间都可以工作,直到它不工作为止。 运行 申请几天后,我看到 debug_log.txt 增长超过 1 MB,而最后移动和重命名的日志文件是空的。
可能是什么原因?
使用 C 标准库中的 rename
函数(在 stdio.h
中)并检查 errno
如果它不知道失败的确切原因。
在处理文件时,I/O 通常,有很多很多事情可能会出错。
One of my senior developer in the company told me so. Is there anything wrong with using system()
?
是:它是不必要的(C 和 POSIX 为您提供了这样的基本用法的功能),不可移植(假设您在具有“mv
”的系统中) ,速度较慢(它需要产生另一个进程)并且在许多用例中都是错误的(例如,除非您保存 mv
的文本输出,否则无法知道到底是什么失败了)。
查看 Moving a file on Linux in C 之类的问题和答案以获得深入的解释。
我有一个用 C 编写的应用程序,它生成各种数据参数,我正在将这些参数登录到名为 debug_log.txt 的文本文件中。每当此日志文件达到 1 MB 时,我都会使用时间戳 ex debug_log_20200106_133000.txt 重命名文件名并将其移动到同一目录中。然后我将重新打开 debug_log.txt 以记录新参数。
if(stat("/home/log/debug_log.txt", &statFiledbg) == 0)
{
if(statFiledbg.st_size >= 1048576) // 1MB
{
current_time = time(0);
strftime(time_buffer, sizeof(time_buffer), "%Y%m%d_%H-%M-%S", gmtime(¤t_time));
sprintf(strSysCmddbg, "mv /home/log/debug_log.txt /home/log/debug_log%s.txt", time_buffer);
system(strSysCmddbg);
fp_dbglog = freopen("/home/log/debug_log.txt", "w", fp_dbglog);
}
}
该代码大部分时间都可以工作,直到它不工作为止。 运行 申请几天后,我看到 debug_log.txt 增长超过 1 MB,而最后移动和重命名的日志文件是空的。
可能是什么原因?
使用 C 标准库中的 rename
函数(在 stdio.h
中)并检查 errno
如果它不知道失败的确切原因。
在处理文件时,I/O 通常,有很多很多事情可能会出错。
One of my senior developer in the company told me so. Is there anything wrong with using
system()
?
是:它是不必要的(C 和 POSIX 为您提供了这样的基本用法的功能),不可移植(假设您在具有“mv
”的系统中) ,速度较慢(它需要产生另一个进程)并且在许多用例中都是错误的(例如,除非您保存 mv
的文本输出,否则无法知道到底是什么失败了)。
查看 Moving a file on Linux in C 之类的问题和答案以获得深入的解释。