服务计算——Selpg

代码详情我的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

1.

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

1

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

2.

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

2

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

3.

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

3

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

4.

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

4

4

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

5.

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

4

4

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

6.

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

4

4

4

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

7.

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

4

4

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

8.

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

4

标准输出被丢弃

9.

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

4

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

10.

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

4

4

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

11.

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

4

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

12.

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

4

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

13.

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

4

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

14.

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

4

selpg后台运行正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值