定時將系統時間更新在日誌檔案中

舟清颺發表於2024-05-10

V1.0 2024年5月9日 釋出於部落格園

實現:設計程式,獲取當前系統時間,把時間轉換為特定格式”yy年mm月dd日 星期x tt:mm:ss”,並每隔1s寫入到本地磁碟中一個叫做log.txt的文字中,如果文字不存在則建立。

程式碼

/**
 * @file name : writing_date.c
 * @brief     : 定時更新日誌檔案, 按ctrl + C結束程式
 * @author    : RISE_AND_GRIND@163.com
 * @date      : 2024/05/09
 * @version   : 1.0
 * @note      :設計程式,獲取當前系統時間,把時間轉換為特定格式”yy年mm月dd日 星期x tt:mm:ss”,
 *             並每隔1s寫入到本地磁碟中一個叫做log.txt的文字中,如果文字不存在則建立。
 * CopyRight (c)  2023-2024   RISE_AND_GRIND@163.com   All Right Reseverd
 */
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>

int Print_Time(FILE *pfile);
int main(int argc, char const *argv[])
{

    // 開啟檔案
    FILE *logfile = fopen("log.txt", "a+b");
    if (NULL == logfile)
    {
        printf("Failed to open file!\n");
        exit(-1);
    }

    // 寫入檔案
    for (int i = 1; 1; ++i)
    {
        if (Print_Time(logfile) < 0)
        {
            printf("Failed to write time information to the file!\n");
            exit(-1);
        }
        sleep(1);
        printf("The log file is updated %d times\n", i);
    }

    // 關閉檔案
    fclose(logfile);
    return 0;
}

/**
 * @name      Print_Time
 * @brief     將系統時間寫入到檔案中
 * @param     pfile 要寫入的檔案指標
 * @return
 *      @retval    負數 寫入失敗
 *      @retval    非負數 寫入的字元總數
 * @date      2024/05/09
 * @version   1.0
 * @note
 */
int Print_Time(FILE *pfile)
{
    // 存放寫入結果
    int Results = 0;

    // 儲存日曆時間, timer=NULL時得到當前日曆時間(從1970-01-01 00:00:00到現在的秒數)
    time_t NowTimeSecs = time(NULL);

    // NowTimeTransition存放 轉換timer的值為tm結構 後的值
    struct tm *NowTimeTransition = localtime(&NowTimeSecs);

    char *str = NULL; // 存放星期轉換結果
    // 對轉後的星期值進行漢字轉換
    switch (NowTimeTransition->tm_wday)
    {
    case 1:
        str = "一";
        break;
    case 2:
        str = "二";
        break;
    case 3:
        str = "三";
        break;
    case 4:
        str = "四";
        break;
    case 5:
        str = "五";
        break;
    case 6:
        str = "六";
        break;
    case 0:
        str = "天";
        break;
    }

    // 傳送格式化輸出流到檔案  格式為“yy年mm月dd日 星期x tt:mm:ss”
    Results = fprintf(pfile, "%d年%02d月%02d日 星期%s %02d:%02d:%02d \n",
                      NowTimeTransition->tm_year + 1900,
                      NowTimeTransition->tm_mon + 1,
                      NowTimeTransition->tm_mday,
                      str,
                      NowTimeTransition->tm_hour,
                      NowTimeTransition->tm_min,
                      NowTimeTransition->tm_sec);
    // 重新整理全緩衝
    fflush(pfile);
    return Results;
}

測試

沒有log.txt檔案時會建立該檔案,寫入結果如下:

2024年05月10日 星期五 01:54:35 
2024年05月10日 星期五 01:54:36 
2024年05月10日 星期五 01:54:37 
2024年05月10日 星期五 01:54:38 
2024年05月10日 星期五 01:54:39 
2024年05月10日 星期五 01:54:40 
2024年05月10日 星期五 01:54:41 
2024年05月10日 星期五 01:54:42 
2024年05月10日 星期五 01:54:43 

控制檯終端結果:

yuyi@IoTDevelopment:~/MyDevelopmentFile/homework/fileIO/20240509$ ./a.out 
The log file is updated 1 times
The log file is updated 2 times
The log file is updated 3 times
The log file is updated 4 times
^C

相關文章