实现个人日志命令行工具(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

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

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

全文完,感谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/257878.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

<软考>软件设计师-5计算机网络(总结)

1 网络功能和分类 1-1计算机网络的功能 计算机网络是计算机技术与通信技术相结合的产物&#xff0c;它实现了远程通信、远程信息处理和资源共享。计算机网络的功能:数据通信、资源共享、负载均衡、高可靠性。 1-2计算机网络按分布范围划分 1-3网络的拓扑结构 总线型&#xff0…

【论文笔记】动态蛇卷积(Dynamic Snake Convolution)

精确分割拓扑管状结构例如血管和道路&#xff0c;对医疗各个领域至关重要&#xff0c;可确保下游任务的准确性和效率。然而许多因素使分割任务变得复杂&#xff0c;包括细小脆弱的局部结构和复杂多变的全局形态。针对这个问题&#xff0c;作者提出了动态蛇卷积&#xff0c;该结…

iPhone手机开启地震预警功能

iPhone手机开启地震预警功能 地震预警告警开启方式 地震预警 版权&#xff1a;成都高新减灾研究所 告警开启方式

kali-捆绑应用程序

文章目录 一、安装开发环境二、开始捆绑三、开始监听 操作环境 kali windows 一、安装开发环境 ┌──(kali㉿kali)-[~] └─$ sudo -i [sudo] kali 的密码&#xff1a;┌──(root㉿kali)-[~] └─# whoami root┌──(root㉿kali)-[~] └─# apt update …

【设计模式--行为型--备忘录模式】

设计模式--行为型--备忘录模式 备忘录模式定义结构案例实现白箱备忘录模式黑箱备忘录模式 优缺点使用场景 备忘录模式 定义 又叫快照模式&#xff0c;在不破坏封装性的前提下&#xff0c;捕获一个对象的对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;以便…

测试工具Jmeter:界面介绍、核心选项说明、核心选项用途

本文章主要介绍Jmeter的界面布局&#xff0c;以及各个选项的功能和它们的用途。 JMeter基本原理是建立一个线程池&#xff0c;多线程运行取样器产生大量负载&#xff0c;在运行过程中通过断言来验证结果的正确性&#xff0c;通过监听器来记录测试结果。 1. Jmeter主界面 当我…

银行测试:第三方支付平台业务流,功能/性能/安全测试方法

1、第三方支付平台的功能和结构特点 在信用方面&#xff0c;第三方支付平台作为中介&#xff0c;在网上交易的商家和消费者之间作一个信用的中转&#xff0c;通过改造支付流程来约束双方的行为&#xff0c;从而在一定程度上缓解彼此对双方信用的猜疑&#xff0c;增加对网上购物…

计算机组成原理(存储器的校验)

存储器的校验 说到存储器的校验就是海明码&#xff08;汉明码&#xff09;&#xff0c;这种题型有两种&#xff1a; 1.编码问题&#xff1a;根据要传送的二进制代码来确定其对应的海明码&#xff08;汉明码&#xff09; 2.检错问题&#xff1a;已知收到的汉明码&#xff0c;…

在 VMware 虚拟机上安装黑苹果(Hackintosh):免费 macOS ISO 镜像下载及安装教程

在 VMware 虚拟机上安装黑苹果(Hackintosh)&#xff1a;免费 macOS ISO 镜像下载及安装教程 VMware 虚拟机解锁 macOS 安装选项使用 macOS iso 系统镜像安装使用 OpenCore 做引导程序安装 在 VMware 虚拟机上安装黑苹果(Hackintosh)&#xff1a;免费 macOS ISO 镜像下载及安装…

硬件产品经理:硬件产品敏捷开发

目录 简介 敏捷 CSDN学院 作者简介 简介 之所以敏捷产品开发流程会越来越普遍。 主要得益于这个方法可以让企业使用更少的资源去开发出令客户满意的新产品。 敏捷开发强调的最重要的一点就是“快”。 也就是要求通过快速迭代来获取频繁的客户反馈。 这就特别适合应对市…

腾讯云微服务11月产品月报 | TSE 云原生 API 网关支持 WAF 对象接入

2023年 11月动态 TSE 云原生 API 网关 1、支持使用私有 DNS 解析 服务来源支持私有 DNS 解析器&#xff0c;用户可以添加自己的 DNS 解析器地址进行私有域名解析&#xff0c;适用于服务配置了私有域名的用户。 2、支持 WAF 对象接入 云原生 API 网关对接 Web 安全防火墙&…

基于“Galera+MariaDB”搭建多主数据库集群的实例

1、什么是多主数据库集群 多主数据库集群是一种数据库集群架构&#xff0c;每个节点都可以接收写入操作和读取操作&#xff0c;并且通过心跳机制同步数据&#xff0c;保证数据一致性和高可用性。因多主数据库集群每个节点都可以承担读写操作&#xff0c;因此它可以充分利用各个…

【无语】Microsoft Edge 浏览器不显示后台返回的数值数据

Microsoft Edge 禁用 JSON 视图 写在前面禁用 JSON 视图 写在前面 遇到一个有意思的事情&#xff0c;在用 Microsoft Edge 浏览器发送请求测试时发现&#xff0c;后端返回的数值数据没有正常展示&#xff0c;而是类似查看源码的结果&#xff0c;只显示了一个行号1&#xff0c;…

java读取含有合并单元格的Excel

java读取含有合并单元格的Excel Excel如下&#xff1a; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.*;import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.…

redis 7.2.3 官方配置文件 redis.conf sentinel.conf

文章目录 Intro解压配置使用等官方配置文件模板redis.conf 仅配置项redis.conf 完整版(配置项注释)sentinel.conf 仅配置项sentinel.conf 完整版(配置项注释) Intro 在下载页面&#xff1a;https://redis.io/download/ 下载最新版本的redis&#xff1a; https://github.com/re…

线上环境如何正确配置 Django 的 DEBUG?

Author&#xff1a;rab Django Version&#xff1a;3.2 Python Version&#xff1a;3.9 目录 前言一、DEBUG True二、DEBUG False三、页面异常解决总结 前言 由于最近在学习 Django 的知识&#xff0c;于是尝试开发了一套 Blog 系统&#xff0c;在本地测试时是页面显示没问题…

STM32/STM8资源节约主义编程方式

STM32/STM8资源节约主义编程方式 在小资源芯片进行代码设计时&#xff0c;如STM32C0系列&#xff0c;STM8系列&#xff0c;因为官方库本身要包含各种场景应用特征的支持&#xff0c;所以会有一些冗余的代码占用更多FLASH空间。当需要实现资源占用最简化设计方式时&#xff0c;…

Java实现一个在windows环境下的文件搜索引擎

以下是一个简单的Java实现的Windows文件搜索引擎的示例代码&#xff1a; import java.io.File; import java.util.ArrayList; import java.util.List;public class FileSearchEngine {public static void main(String[] args) {String searchDirectory "C:/"; // …

在WPF窗口中增加水印效果

** 原理&#xff1a; ** 以Canvas作为水印显示载体&#xff0c;在Canvas中创建若干个TextBlock控件用来显示水印文案&#xff0c;如下图所示 然后以每一个TextBlock的左上角为中心旋转-30&#xff0c;最终效果会是如图红线所示&#xff1a; 为了达到第一行旋转后刚好与窗口…

排序嘉年华———选择排序和快排原始版

文章目录 一.选择排序二.霍尔版快速排序1.单趟思想2.递归多趟3.寻找中间值作为key 一.选择排序 在进行大佬“快排”之前先来一道开胃小菜————选择排序 选择排序是一种简单直观的排序算法&#xff0c;它的基本思想是每一次从待排序的数据元素中选出最小&#xff08;或最大&…