Linux 命令行参数 实现自定义选项和参数实现读取时间各个值得功能

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#include<unistd.h>
#define BUFSIZE 1024
#define TIMEFMTSTRSIZE 1024
/*
 *-y 年
 *-m 月
 *-d 日
 *-H 时
 *-M 分
 *-S 秒
 *
 * */
int main(int argc,char** argv)
{

        FILE *fp;
        time_t stamp;
        struct tm* tm;
        char buf[BUFSIZE];
        int c;
        char timeFmtStr[TIMEFMTSTRSIZE];
        time(&stamp);
        tm=localtime(&stamp);
        fp=stdout;
        timeFmtStr[0]='\0';
        while(1)
        {
                //在该字符串后加了:说明该选项是需要参数传入 一旦规定某选项需要参数则每次使用该选项一定要输入参数
                //在字符串加了-说明可以处理输入的参数 此时c为1 此时输入参数作为打印的路径
                c=getopt(argc,argv,"-H:MSy:md");
                if(c<0)
                        break;
                switch (c)
                {
                case 1:
                        //已输入的第一个地址为输出路径
                        if(fp==stdout)
                        {
                                //处理非(选项或其所带的参数)的字符串,argv[optind-1]可以读取处理字符串
                                fp=fopen(argv[optind-1],"w");
                                if(fp==NULL)
                                {
                                        perror("fopen()");
                                        fp=stdout;
                                }
 }
                        break;
                case 'y':
                        //optarg可以读取选项后的参数
                        if(strcmp(optarg,"2")==0)
                        {
                                strncat(timeFmtStr,"%y ",TIMEFMTSTRSIZE);
                        }
                        else if(strcmp(optarg,"4")==0)
                        {
                                strncat(timeFmtStr,"%Y ",TIMEFMTSTRSIZE);

                        }
                        break;
                case 'm':
                        strncat(timeFmtStr,"%m ",TIMEFMTSTRSIZE);
                        break;
                case 'd':
                        strncat(timeFmtStr,"%d ",TIMEFMTSTRSIZE);
                        break;
                case 'H':
                        if(strcmp(optarg,"12")==0)
                        {
                                strncat(timeFmtStr,"%I(%p) ",TIMEFMTSTRSIZE);
                        }
                        else if(strcmp(optarg,"24")==0)
                        {
                                strncat(timeFmtStr,"%H ",TIMEFMTSTRSIZE);

                        }

                        break;
 case 'M':
                        strncat(timeFmtStr,"%M ",TIMEFMTSTRSIZE);
                        break;
                case 'S':
                        strncat(timeFmtStr,"%S ",TIMEFMTSTRSIZE);
                        break;
                default:
                        break;
                }
        }

        strftime(buf,BUFSIZE,"NOW:%Y%m%d %H%M%S\n",tm);
        fputs(buf,fp);
        strftime(buf,BUFSIZE,timeFmtStr,tm);
        fputs(buf,fp);
        if(fp!=stdout)
                fclose(fp);

        exit(0);
}

命令行

make dayPrint

测试命令行

 ./dayPrint -y 4 -mdH 12 -MS /tmp/out /tmp/hhh

打印指定的/tmp/out中的内容 

cat /tmp/out

 结果:

NOW:20241022 131315
2024 10 22 01(PM) 13 15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值