服务计算第四周作业:开发简单CLI程序

CLI 命令行实用程序开发基础 理解CLI CLI(Command Line Interface)实用程序是Linux下应用开发的基础。为使用命令行与操作系统交互。 环境 ubuntu, vscode, go1.13.8 GOLANG OS包与FLAG包处理参数测试 首先是OS包的测试 如下 package main import ( "fmt" "os" ) func main() { for i, a := range os.Args[1:] { fmt.Printf("Argument %d is %s\n", i+1 阅读详情

使用golang开发Linux命令行使用程序selpg

文章目录

概述

CLI(Command Line Interface)实用程序是Linux下应用开发的基础。正确的编写命令行程序让应用与操作系统融为一体,通过shell或script使得应用获得最大的灵活性与开发效率。Linux提供了cat、ls、copy等命令与操作系统交互;go语言提供一组实用程序完成从编码、编译、库管理、产品发布全过程支持;容器服务如docker、k8s提供了大量实用程序支撑云服务的开发、部署、监控、访问等管理任务;git、npm等都是大家比较熟悉的工具。尽管操作系统与应用系统服务可视化、图形化,但在开发领域,CLI在编程、调试、运维、管理中提供了图形化程序不可替代的灵活性与效率

原版C语言selpg分析

如何使用

selpg是从文本输入选择页范围的实用程序。该输入可以来自作为最后一个命令行参数指定的文件,在没有给出文件名参数时也可以来自标准输入。selpg 首先处理所有的命令行参数。在扫描了所有的选项参数(也就是那些以连字符为前缀的参数)后,如果 selpg 发现还有一个参数,则它会接受该参数为输入文件的名称并尝试打开它以进行读取。如果没有其它参数,则 selpg 假定输入来自标准输入。

在命令行中输入的指令为如下形式,:

selpg -sstart_page -eend_page [-lline | -f ] [-d dstFile] filename

我们来看每个参数的含义。

首先是两个必选参数:

  • -sstartPage:例如-s10,表示从第10页开始打印。
  • -eendPage:例如-e50,表示打印到50页。
selpg -s10 -e50 ..

然后是可选参数:

  • -llinePerPage :例如-l72,表示每一页72行,即将输入文件按72行一页分割,默认为72。
  • -f :按照换页符来打印,默认一行一页。
  • -ddstFile:输出文件路径,默认为标准输出,即命令行界面。

如果在检查完上面的参数后发现还有一个参数,即filename,则将其设置为输入文件,否则等待标准输入即命令行输入文件路径。

一些例子:

selpg -s1 -e1 input_file

将input_file的第1页打印到屏幕。

selpg -s10 -e20 input_file >output_file

将input_file的第10页到第20页打印output_file。

源代码分析

首先定义了一个结构体selpg_args,包含了所有参数。

struct selpg_args
{
   
   
	int start_page;
	int end_page;
	char in_filename[BUFSIZ];
	int page_len; /* default value, can be overriden by "-l number" on command line */
	int page_type; /* 'l' for lines-delimited, 'f' for form-feed-delimited */
					/* default is 'l' */
	char print_dest[BUFSIZ];
};

process_args函数解析用户的输入,将对应的参数放入参数结构体sa中。以空格分隔的字符串前带有连字符作为标志判断参数,最后如果还有一个参数的话将其设为输入文件,并且检查所有的输入是否符合要求打印错误信息。

process_input函数负责根据sa的属性设定输入输出源,设置每页的行数并开始打印。

usage函数用于打印帮助信息。

那么我们这次的任务,就是将c语言程序“翻译”成go语言程序。

golang实现selpg

  • 首先是selpgArgs结构体,比较简单

    type selpgArgs struct {
         
         
    	startPage int
    	endPage int
    	inputFile string
    	pageLen int
    	pageType bool
    	printDest string
    }
    
  • ProcessArgs函数:

    func ProcessArgs(parg *selpgArgs) {
         
         
    	/*参数个数必须大于等于3*/
    	if len(os.Args) < 3 {
         
         
    		fmt.Fprintf(os.Stderr, "%s: not enough arguments\n", progname)
    		Usage();
    		os.Exit(1)
    	} 
    	/*第一个参数必须是-s*/
    	tmp := os.Args[1]
    	if tmp[0:2] != "-s" {
         
         
    		fmt.Fprintf(os.Stderr, "%s: 1st arg should be -sstart_page\n",  progname
实验五:LINUX 下C语言使用、编译与调试实验 实验五:LINUX下C语言使用、编译与调试实验 一、实验目的: 练习并掌握Linux提供的vi编辑器来编译C程序 学会利用gcc、gdb编译、调试C程序 学会使用make工具 二、实验内容 编写C语言程序,用gcc编译并观察编译后的结果,运行生成的可执行文件。 利用gdb调试程序。 学习编写makefile,并进行编译。 三、实验步骤 1、文件编辑器vi 进入vi,直接执行v... 阅读详情

相关推荐

飞书CLI实战指南:办公自动化从命令行开始

命令行工具(CLI)是现代办公自动化的底层基础设施,其核心价值在于将重复性操作封装为可复用、可调度的指令。飞书CLI并非简单封装API,而是基于业务意图构建分层能力体系——底层统一鉴权与错误处理,中层按场景聚合多接口调用,上层支持插件扩展AI与私有系统。这种设计显著降低使用门槛,使非技术用户也能快速上手,同时保障企业级安全与稳定性。典型应用场景包括多维表格批量同步、项目状态自动周报、HR入职数据定时更新等。本文聚焦飞书CLI的实战落地路径,涵盖安装选型、鉴权配置、权限校验、脚本编写与自动化调度等关键环节。

weixin_33768481的博客 352

clifm:使用C语言编写的完全基于CLI的,类似于shell的KISS文件管理器:简单,快速,轻量

调频 KISS文件管理器:基于CLI,超轻量级,闪电般快速,并用C编写 配套 基本原理 为什么在这个世界上我们需要另一个文件管理器? 首先,只是因为我可以在过程中做到,编写和学习(很多),仅仅是因为这是一个自由的世界,特别是一个自由的社区。 不用说,替代是自由的核心。 其次,因为我确定我不是这个世界上唯一一个寻找非non肿的KISS文件管理器的人(关于Arch的简单性,请参见: ://wiki.archlinux.org/index.php/Arch_Linux ):它只需使用尽可能少的资源即可完成任何需要完成的工作。 没有GUI,没有诅咒,而只是一个命令行,类似于shell的文件管理器:您只需要5MiB的RAM和350KiB的磁盘空间(加上一些尝试其他新东西的意愿)。 最后,因为与大多数文件管理器不同,CliFM当然是文件管理器,而且是shell扩展。 您在Shell上执行的几乎

Web渗透(一)CRLF注入简介

CRLF注入简介1、基础知识2、原理分析3、漏洞挖掘4、防御手段5、CRLF Payload: 1、基础知识 HTTP报文结构 从上图可以看到:HTTP报文由三部分组成:状态行、首部、主体。 可以看到状态行和首部中的每行都是以回车符(\r,%0d,CR)和换行符(\n,%0a,LF)结束。 十六进制编码分别为0x0d和0x0a,URL编码为%0D和%0A 这是因为HTTP规范中行应该使用CRLF结束。另外,首部和主体由两个CRLF分隔。 2、原理分析 CRLF是 “ 回车+换行 ”(\r\n)的简称。

weixin_39157582的博客 6821

全网最详细Seurat v5 流程复现(拿来即用)

本文是基于seurat v5版本的教程复现,主要依据来源于官网seurat v5建议大家有时间的话可以去官网进行详细阅读学习!本节内容在之前seurat v4的教程都很多都有提到,文章所用到的数据及代码已经给各位放在这里了,有需要自取!请点击这里哦提取码:bui1。

ZxVSaccount的博客 1万+

别再手动填数据了!Vivado里用.coe文件给ROM IP核预装数据的保姆级教程

本文详细介绍了在Vivado中使用.coe文件为ROM IP核预装数据的全流程教程,包括文件格式规范、数据转换技巧和Vivado配置指南。通过自动化数据加载,开发者可以显著提升FPGA开发效率,避免手动输入错误,适用于查找表、波形存储等多种应用场景。

weixin_33377602的博客 337

复古与新生:老毛子Padavan固件在旧设备上的现代化应用之旅

本文探讨了如何通过刷入Padavan固件,让小米路由器3G(R3G)等老旧设备重获新生,实现现代化应用。详细介绍了从硬件潜力分析、智能家居中枢搭建,到轻量级服务器部署和网络功能扩展的全过程,为技术爱好者提供了一条低成本、高性能的设备改造之路。

k8s6orchestrator的博客 1061

内网(极空间)搭建gitlab跳板机转发端口及域名配置

然后,回头尝试用内网地址+15022 clone,成功,用公网的ip+15222 clone失败,那就是定位到时nginx转发的问题了。首先想到的就是 git clone是通过ssh的22端口进行下载的,那就需要打通22端口,则又配置22端口的nginx转发。然后,我通过ssh命令,做一个端口转发,以实现内网穿透,将服务端口链接到跳板机上。然后穿透到阿里云服务器跳板机的端口,只能内网访问,需要用nginx做个转发,才能用公网ip进行访问。然后,如上,我的80端口,映射15080,22端口映射15022。

God丶Davide的博客 6074

费斯托SPAN压力传感器的调试

本体为压力传感器,检测气压大小,通过设置参数,在上电上气时对气压进行判断,进而通过自身逻辑的判断,控制传感器的通断,进而控制机械部位的工作与运行;通电之后为如下图所示的样子有三个按键ABEdit键(编辑键、确认键)两步即可轻松连接。

大小曲奇的博客 1万+

FOC控制必看:单/双/三电阻电流采样方案全对比(附NXP实战避坑指南)

本文深入对比了FOC控制中单电阻、双电阻和三电阻电流采样方案的优劣与适用场景,重点剖析了采样时序、窗口与ADC转换的工程挑战。针对NXP平台,提供了解决采样窗口过窄的实战方案与配置指南,帮助工程师根据成本与性能需求做出最优选择,并规避常见设计陷阱。

n2o3p4的博客 412

10分钟上手YOLOv11:最强姿态估计模型来了,代码开源,效果炸裂!

【10分钟玩转YOLOv11实时姿态估计】🚀 YOLOv11作为YOLO家族最新成员,在速度、精度和易用性上全面升级,尤其适用于姿态估计等复杂视觉任务。本文带您快速掌握: 1️⃣ 核心概念:姿态估计即识别人体17个关键点(如关节部位)并连接成数字骨架,是智能健身、体感游戏等应用的基础。 2️⃣ 技术优势: 超轻量级(最小仅2.9M参数) 极速推理(GPU仅1.7ms) 高精度(COCO mAP@50-95达50%) 3️⃣ 三步实操: ① 安装:pip install ultralytics ② 准备人物

weixin_41246802的博客 1787

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: Unity3D作业四:游戏对象与图形基础
下一篇: Unity3D项目五:简单打飞碟
Tifinity
博客等级 码龄9年 18粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值