代码详情我的Github

1.概述

Selpg从标准输入或从作为命令行参数给出的文件名读取文本输入。它允许用户指定来自该输入并随后将被输出的页面范围。例如,如果输入含有 100 页,则用户可指定只打印第 35 至 65 页。这种特性有实际价值,因为在打印机上打印选定的页面避免了浪费纸张。另一个示例是,原始文件很大而且以前已打印过,但某些页面由于打印机卡住或其它原因而没有被正确打印。在这样的情况下,则可用该工具来只打印需要打印的页面。

2.函数分析

  1. Parser函数——用于解析命令行参数。
  2. processArgs函数——大量的错误检查以使它尽可能的健壮。
  3. usage函数——显示输入样例
  4. process_input函数选择所需的页并将其写至指定的目的地

3.参数解析

本次实验的参数解析运用了Go语言中的flag包来进行解析,举个例子

flag.IntVar(&p.start_page, “s”, -1, “首页号”)

当输入的参数没有-s的选项,start_page的值则默认为-1;倘若有-s选项,如-s=1或-s 1,则会自动识别-s之后的数字并将start_page赋值为1。

命令行flag的语法有如下三种形式:

-flag // 只支持bool类型
-flag=x
-flag x // 只支持非bool类型

关于更多flag的使用请点击链接。命令行参数解析


测试

为了测试方便,page_len的默认值改为5,输出的每页行数为5

测试文件(在第3、8、12和15行的尾部各有一个换页符/f):

1.

./selpg -s=1 -e=1 in

该命令将把“input_file”的第1页写至标准输出(也就是屏幕),因为这里没有重定向或管道。page_len为5,所以第一页打印了5行line,中间空行是因为换页符的存在。

2.

./selpg -s=1 -e=1 < in

该命令与示例 1 所做的工作相同,但在本例中,selpg 读取标准输入,而标准输入已被 shell/内核重定向为来自“input_file”而不是显式命名的文件名参数。输入的第 1 页被写至屏幕,输出效果同上。

3.

cat in | ./selpg -s=1 -e=1

“cat”的标准输出被 shell/内核重定向至 selpg 的标准输入。将第 1 页写至 selpg 的标准输出(屏幕)。

4.

./selpg -s=1 -e=1 in > out

selpg 将第 1页写至标准输出,标准输出被shell/内核重定向至“out”。输出没有在命令行显示,而是显示在输出文件中。

5.

./selpg -s=1 -e=-1 in 2> error

把end_page设为-1,发生错误,所有的错误消息被 shell/内核重定向至“error”。

6.

./selpg -s=1 -e=1 in > out 2> error

selpg 将第1页写至标准输出,标准输出被重定向至“out”, 发生的“错误”写至error(实际上没有错误,“done!”只是为了演示)。

7.

./selpg -s=1 -e=1 in > out 2>/dev/null

selpg 将第 1页写至标准输出,标准输出被重定向至“out”,丢弃错误信息。可见成功输出到out文件,而error文件为空。

8.

./selpg -s=1 -e=1 in > /dev/null

标准输出被丢弃

9.

./selpg -s=1 -e=1 in | wc

selpg 的标准输出透明地被 shell/内核重定向,成为“wc”的标准输入,显示第一页中包含的行数、字数和字符数。

10.

./selpg -s=1 -e=1 in 2> error | wc

同上,唯一不同就是错误消息被写至“error_file”。

11.

./selpg -s=1 -e=1 -l=2 in

输出的页长设置为2行,可见输出了一页为2行的信息。

12.

./selpg -s=1 -e=2 -f in

页面由换页符定界。第1页到第2页被写至 selpg 的标准输出。

13.

./selpg -s=1 -e=2 -d=lp1 in

由于缺少打印机,用cat命令代替lp命令,结果正确。

14.

./selpg -s=1 -e=2 in > out 2> error &

selpg后台运行正常。

服务计算——Selpg相关推荐

  1. 服务计算 | Selpg Golang实现

    文章目录 selpg介绍 命令行准则 输入 输出 错误输出 执行 命令行参数 selpg参数介绍 Golang实现 数据结构 参数解析 校验参数 处理命令输入 readFile函数 程序测试 selp ...

  2. 服务计算作业三——CLI 命令行实用程序开发基础

    服务计算作业三--CLI 命令行实用程序开发基础 18342138 郑卓民 本次作业gitee仓库链接(完整代码) 概述 CLI(Command Line Interface)实用程序是Linux下应 ...

  3. 西华大学计算机学院陈鹏,中国计算机学会CCF服务计算专委会走进西华大学

    近日,"中国计算机学会CCFF服务计算专委走进高校活动"来到西华大学.此次活动邀请到CCF服务计算专委会副主任.天津大学冯志勇教授,南京大学马晓星教授,CCF服务计算专委会副秘书长 ...

  4. 使用c++制作微服务计算服务

    其他链接 上次使用了go来制作微服务计算服务 go制作微服务计算服务 c++制作标准差服务计算 使用c++的计算服务速度是更快的,一下只是一个计算标准差的函数样例,和go服务之间进行交换可以使用更简单 ...

  5. 华为公有云服务-计算类(2)

    华为公有云服务-计算类(2) 如何在公有云上购买使用ECS(网络配置)? ECS管理-登录windows系统 ECS ECS管理-登录Linux系统 ECS ECS管理 - 重装/切换操作系统 ECS ...

  6. 服务计算作业二——GO语言TDD实践报告

    服务计算作业二--GO语言TDD实践报告 服务计算作业二--GO语言TDD实践报告 教程学习 为一个重复字符五次的函数编写测试,并先使用最少的代码让失败的测试先跑起来(核心概念) 把代码补充完整,使得 ...

  7. 无服务计算的未来和挑战: A Berkeley View on Serverless Computing

    加州大学伯克利分校继 2009 年发布 <The Berkeley View on Cloud Computing>一举拨开云计算迷雾,十年后又一次发布了 <A Berkeley V ...

  8. 服务计算 -- 搭建私有云

    服务计算 – 搭建私有云 文章目录 服务计算 -- 搭建私有云 下载VirtualBox及所需镜像 安装虚拟机 配置虚拟机存储位置 创建虚拟机内部虚拟网络 创建Base虚拟机(Centos为例) 链接 ...

  9. 无服务计算应用场景探讨及 FaaS 应用实战

    简介: 无服务计算本身是一个概念或者理论模型,落地到具体技术上主要有函数即服务(FaaS)以及后端即服务(BaaS)两种形式,阿里云提供函数即服务 FaaS 产品. 作者 | 宋文龙(闻可)  阿里云 ...

  10. 服务计算——Vmware搭建私有云桌面

    服务计算--Vmware搭建私有云桌面 下载 装载虚拟机 设置网络 安装图形界面 远程桌面 服务计算--Vmware搭建私有云桌面 下载 首先安装vmware,并下载好centos7的镜像文件,min ...

最新文章

  1. 拖动无标题栏的窗体,需要处理的三个事件
  2. conductor任务域
  3. java里面什么时候环境变量_Java的环境变量什么时候需要设置?
  4. java mac 转换 整形_JAVA的整型与字符串相互转换
  5. Java-break-continue
  6. flutter 一直loading_开源 | FLUI : Flutter 的组件扩展集
  7. Oracle 10g新特性
  8. linux 下pycharm 无法输入中文
  9. 第一次敲hdu蟠桃树和第二次的区别
  10. 软件测试员如何进行产品测试?
  11. starting Intent from ProcessRecord with revoked permission android.permission.CALL_PHONE 的错误原因
  12. 我们游戏后台架构学习
  13. Java Web学习日记(一)
  14. OpenCV实践小项目(一): 信用卡数字识别
  15. 报如下错误:android.util.AndroidRuntimeException: You cannot combine custom titles with other title featur
  16. 什么是子网掩码?怎么根据子网掩码得到网络号?
  17. webpack配置entry详解
  18. 在线广告原理:从橱窗到互联网广告核心交易模式——RTB
  19. 图片解码 java_Java 8实现图片BASE64编解码
  20. 机器人ccid认证_机器人认证来了

热门文章

  1. 如何判断电路反馈类型
  2. 以太网电缆行业调研报告 - 市场现状分析与发展前景预测
  3. 芥子纳须弥——浅谈数据压缩技术
  4. uso oracle,Oracle Database 12c: In-Memory (Parte I)
  5. android音视频焦点切换
  6. 找一下不男不女 ?。。?
  7. 手机如何访问电脑局域网文件共享服务器,手机怎么访问局域网电脑共享文件
  8. adb获取剪贴板内容_Android复制粘贴剪切板内容的一种方法
  9. Echarts正态分布曲线
  10. 麒麟下适配mellanox网卡驱动