实现个人日志命令行工具(C语言)

〇、前言

中午上课的时候,打开 github 看了一下个人主页,虽然最近很忙,但是这个活动记录有点过于冷清:
在这里插入图片描述
于是我就想着写一个日志命令行工具,输入以下命令就能将我的日志立即同步到 github 上:

mylog today is really a long day!

之后 today is really a long day! 这句话就会被同步到 github 上的今天的文件中了。

一、思路以及实现

思路很简单:

  • 1、获取当前日期;
  • 2、利用当前日期作为日志文件名,后缀为 _log.txt
  • 3、从 argv 中获取具体日志,写入到日志文件中;
  • 4、git 相关操作,并上传到远端仓库。

以下就是实现的代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
// 当前日志名
char filename[100] = {
   0};
// 文件夹
const char *dir = 0;
// 文件名,用于 commit信息
char real_file_name[100] = {
   0};
// 获取当前日期

char *getTime() {
   
    struct tm *timeinfo;
    time_t rawtime;
    char *buffer =
        malloc(sizeof(char) * 80); // 防止返回后,栈空间被冲掉,推荐用堆

    time(&rawtime);
    timeinfo = localtime(&rawtime);

    strftime(buffer, 80, "%Y-%m-%d", timeinfo);
    return buffer;
}

// 生成带有日期文件的文件

FILE *creatFile() {
   
    char *currentTime = getTime();
    char *lastName = "_log.txt";
    dir = "/Users/******/Daily_Life_Log/";

    snprintf(real_file_name, 100, "%s%s", currentTime, lastName);

    snprintf(filename, sizeof(filename), "%s%s%s", dir, currentTime, lastName);
    FILE *file = fopen(filename, "a");
    if (file != NULL) {
   
        printf("文件已创建成功!\n");
    } else {
   
        printf("无法创建文件!\n");
    }
    return file;
}

int main(int argc, char *argv[]) {
   
    // 安全检查
    if (argc < 2) {
   
        printf("请输入日志!\n");
        return -1;
    }

    // 往文件中写入文件
    FILE *file = creatFile();
    for (int i = 1; i < argc; i++) {
   
        fprintf(file, "%s", argv[i]);
        fprintf(file, "%s", " ");
    }
    fprintf(file, "%s", "\n"); // 加入换行符
    fclose(file);

    // git
    if (chdir(dir) == 0) {
   
        printf("目录切换成功!\n");
    } else {
   
        perror("chdir");
    }
    // 合成git add 命令

    char git_add[100] = {
   0};
    snprintf(git_add, sizeof(git_add), "%s%s", "git add ", real_file_name);
    system(git_add);
    
    // 合成 git commit 
    char *command0 = "git commit -m \"";
    char *tag1 = "\"";
    char command1[100] = {
   0};
    snprintf(command1, sizeof(command1), "%s%s%s", command0, real_file_name, tag1);
    system(command1);
    
    system("git push");
    return 0;
}

二、一些细节

上面的代码为了能让编译好的二进制文件在 ~(用户目录)直接运行(直接输入命令名字)并且 git 操作不发生错误,额外多了一些东西,比如切换目录合成 git 相关命令

编译好后,直接在当前目录终端将二进制文件移到 /usr/local/bin中,就好了。

sudo mv ./mylog /usr/local/bin/

运行一下:

~ mylog today I created a interesting mylog tool!
文件已创建成功!
目录切换成功!
[main 511bdd4] 2023-12-19_log.txt
 1 file changed, 1 insertion(+), 1 deletion(-)
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 306 bytes | 306.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:******  main -> main

结果符合预期,成功写入了一条日志,并同步到了远端:
在这里插入图片描述
在这里插入图片描述

我想,这可能就是编程的趣味性~

全文完,感谢阅读!

相关推荐

  1. C语言命令

    2023-12-21 17:24:03       39 阅读
  2. C语言命令参数

    2023-12-21 17:24:03       34 阅读
  3. c语言读写日志代码实现

    2023-12-21 17:24:03       47 阅读
  4. 【计算机二级考试C语言C命令参数

    2023-12-21 17:24:03       47 阅读
  5. ffmpeg命令工具安装

    2023-12-21 17:24:03       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-21 17:24:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-21 17:24:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-21 17:24:03       82 阅读
  4. Python语言-面向对象

    2023-12-21 17:24:03       91 阅读

热门阅读

  1. 微信小程序ts+less模版引入Rant Weapp

    2023-12-21 17:24:03       72 阅读
  2. C++中sort()排序函数使用方法

    2023-12-21 17:24:03       58 阅读
  3. C语言实现大数的加法

    2023-12-21 17:24:03       53 阅读
  4. obsidian + cloudreve 搭建个人云盘

    2023-12-21 17:24:03       60 阅读
  5. electron兼容统信UOS系统过程中的坑

    2023-12-21 17:24:03       56 阅读
  6. 亲测解决ERROR: Could not build wheels for cryptacular

    2023-12-21 17:24:03       57 阅读
  7. uniapp随记

    2023-12-21 17:24:03       82 阅读
  8. qt 实现 ftp 上传与下载

    2023-12-21 17:24:03       61 阅读
  9. facebook广告投放有哪些需要注意的

    2023-12-21 17:24:03       56 阅读
  10. 在 Docker 上部署 Nacos 并连接到 MySQL

    2023-12-21 17:24:03       47 阅读
  11. 数据分析的基本步骤有哪些?

    2023-12-21 17:24:03       55 阅读
  12. 【密码学引论】密码协议

    2023-12-21 17:24:03       47 阅读