Improved cat

This commit is contained in:
Meutel 2017-07-07 14:46:40 +02:00
parent 477a79264b
commit 51f746907b
2 changed files with 55 additions and 0 deletions

1
.gitignore vendored
View File

@ -28,3 +28,4 @@ avatar/avatar
w1d2ex1/w1d2ex1 w1d2ex1/w1d2ex1
swap/swap swap/swap
w1d1ex2/w1d1ex2 w1d1ex2/w1d1ex2
go-cat2/go-cat2

54
go-cat2/main.go Normal file
View File

@ -0,0 +1,54 @@
package main
import "fmt"
import "io"
import "log"
import "os"
import "strings"
var err error
var reader io.Reader
const BUFSIZE = 32 * 1024
func openFile(path *string) *os.File {
f, err := os.Open(os.Args[1])
if err != nil {
log.Fatalln(err)
}
return f
}
func readMe(r io.Reader) {
var n int
buf := make([]byte, BUFSIZE)
for {
n, err = r.Read(buf)
if n == 0 || err == io.EOF {
break
}
if err != nil {
log.Fatalln("Read error", err)
}
fmt.Printf("%s", buf[:n])
}
}
func main() {
if len(os.Args) <= 1 {
var content string
if _, err := fmt.Scanln(&content); err != nil {
log.Fatalln(err)
}
reader = strings.NewReader(content)
} else {
readers := []io.Reader{}
for i := 1; i < len(os.Args); i++ {
f := openFile(&os.Args[i])
defer f.Close()
readers = append(readers, f)
}
reader = io.MultiReader(readers...)
}
readMe(reader)
}