【Go】使用bufio包简单模拟实现linux的cat命令

在这里插入图片描述

最近刚好快把Go的文件输入输出过完了,实现个小demo,用bufio包模拟Unix/Linux系统中的cat命令,demo的主要功能是:通过命令行参数接收文件名,将指定文件的内容输出到标准输出。如果没有提供文件名参数,则从标准输入读取内容并输出。

几个包的说明:

  • bufio包提供了带缓冲的I/O操作,可以提高读写效率。
  • flag包用于解析命令行参数。
package  main

import (
	"bufio"
	"flag"
	"fmt"
	"io"
	"os"
)

func cat(r *bufio.Reader){
	for{
		buf ,err := r.ReadBytes('\n') //注意是字符,也就是一行一行换行读取
		if err == io.EOF{
			break
		}
		fmt.Fprintf(os.Stdout,"%s",buf)
	}
}

func main(){
	flag.Parse() //解析命令行参数
	if flag.NArg() == 0{
		cat(bufio.NewReader(os.Stdin))  //如果没有参数默认从标准输入读取内容
	}
	for i:= 0 ; i<flag.NArg();i++{
		f,err := os.Open(flag.Arg(i))  //返回一个error和一个file对象
		if err != nil{
			fmt.Fprintf(os.Stdout,"reading from %s failed, err %v\n",flag.Arg(i),err)
			continue
		}
		cat(bufio.NewReader(f))
	}
}

cat函数主体部分说明:

  1. cat函数接收一个*bufio.Reader类型的参数r。
  2. r.ReadBytes(‘\n’)方法从r中读取直到遇到换行符\n的字节序列,返回读取的字节序列buf和错误err。
  3. 使用fmt.Fprintf函数将读取到的buf内容格式化后输出到标准输出os.Stdout。

main函数主体部分说明:

1.if flag.NArg() == 0判断是否有命令行参数传入。如果没有参数,调用cat函数,传入bufio.NewReader(os.Stdin),即从标准输入读取内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值