服务计算第四周作业:开发简单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上执行的几乎

RK3568-Linux-麒麟系统---更新制作麒麟rootfs

RK3568 Linux系统 麒麟国产麒麟镜像

qiuzw2003的博客 5360

lisflood-fp(一)从源码到可执行文件:Windows下的Cmake实战编译指南

本文详细介绍了在Windows环境下使用Cmake工具编译lisflood-fp水文模型源码生成可执行文件的全过程。从开发环境配置、源码获取到实战编译,逐步指导如何解决常见错误并处理运行时依赖,最终生成可用的exe文件。特别适合水文专业研究者和工程师学习参考。

weixin_30555125的博客 481

Windows11 下 Detectron2 的安装与配置全攻略

本文提供了在Windows11系统下安装和配置Detectron2的完整教程。详细介绍了从环境准备、创建虚拟环境、安装PyTorch与CUDA,到修改源码、编译安装以及运行验证Demo的全过程,帮助开发者克服Windows平台上的常见问题,成功部署这一强大的计算机视觉库。

weixin_29081703的博客 246

YOLOv10注意力革新:小波域注意力(WDA)如何实现多尺度特征精准聚焦

本文深入解析YOLOv10中的小波域注意力(WDA)机制,探讨其如何通过频域分解与动态聚焦实现多尺度特征精准提取。WDA模块结合离散小波变换与注意力机制,显著提升小目标检测性能,在VisDrone数据集上AP提升达12.6%。文章详细介绍了两种集成方案及代码实现,为计算机视觉开发者提供实用指南。

weixin_29079671的博客 252

GEO数据库数据下载方法总结

#GEO数据下载 GEO是生信分析经常用到的数据库。经常需要从中获取表达矩阵,平台信息,meta信息等,本博文总结了几种下载GEO数据的方法,各有优劣,实际应用过程中自行选择适合自己的。 ##方法一:直接从浏览器中下载 以数据集GSE1001为例, 可以直接点击“Series Matrix Files”获取该样本txt格式的表达谱数据,一般我们认为这种处理过的表达谱数据是没有问题的,当然,具体情况具体分析。 打开下载的文件可以看到许多“#”开头的行,这些是注释信息,一般关注这些注释信息中的“data pr

sakoko_的博客 4万+

Apifox CLI + Claude Skills:将接口自动化测试融入ai

基于 Apifox CLI、Claude Code以及Claude Skills组合,实现自然语言触发接口自动化测试。

wwz_0012的博客 598

点云语义分割:RandLANet模型推理C++部署(2)

一、数据读取及预处理 二、模型推理 三、结果保存

zhaoguanhua的博客 3798

用 ABAP 的 AMDP 把计算推到数据库:概念、场景、以及可运行示例

摘要:AMDP(ABAP Managed Database Procedures)是SAP HANA环境下优化ABAP性能的关键技术,通过将数据计算逻辑推送到数据库端执行,减少数据传输和应用层处理开销。其核心价值在于利用HANA的集合运算能力,适用于大数据量聚合、窗口函数等复杂计算场景。AMDP不是通用解决方案,而是针对CDS无法高效处理的特定性能瓶颈的优化手段。典型应用包括财务统计、零售分析等需要高性能数据处理的业务场景。本文通过概念解析、性能逻辑推导和实际代码示例(包括直接调用的AMDP Procedu

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 261

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

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

计算机控制技术及应用

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

WINCC7.3破解文件

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

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值