// my_zcat.go
package main
import (
"fmt"
"os"
"bufio"
"compress/gzip"
)
func err_exit(err os.Error) {
fmt.Fprintf(os.Stderr,"ERROR: %s\n", err.String())
os.Exit(1)
}
func main() {
if len(os.Args) <= 1 {
fmt.Fprintf(os.Stderr, "Usage: my_zcat gzfile\n")
os.Exit(1)
}
gz,err := os.Open(os.Args[1], os.O_RDONLY, 0666)
// err != nil && err_exit(err)
if err != nil { err_exit(err) }
b_rd,err := bufio.NewReaderSize(gz, 32768)
if err != nil { err_exit(err) }
gz_rd,err := gzip.NewReader(b_rd)
if err != nil { err_exit(err) }
buf := make([]byte, 32768, 65536)
// b_wr,err := bufio.NewWriterSize(os.Stdout, 32768)
// if err != nil { err_exit(err) }
for {
n,err := gz_rd.Read(buf)
if err != nil {
if err == os.EOF {
break
}
err_exit(err)
}
os.Stdout.Write(buf[0:n])
// b_wr.Write(buf[0:n])
}
gz_rd.Close()
gz.Close()
return
}
makeの第3引数で指定するキャパシティの意味するところが、理解出来ていません。それから、
err != nill && err_exit(err)のようには書けませんでした。コンパイルエラーになります。
[user00@fedora14 ~]$ 6g my_zcat.go my_zcat.go:24: err_exit(err) used as value
2011-04-02追記
実行イメージを書いていなかったので、追記です。
[user00@fedora14 ~]$ 6g my_zcat.go [user00@fedora14 ~]$ 6l -o my_zcat my_zcat.6 [user00@fedora14 ~]$ ls -l my_zcat -rwxrwxr-x 1 user00 user00 2143092 Apr 2 21:17 my_zcat [user00@fedora14 ~]$ echo hello | gzip -c > hello.gz [user00@fedora14 ~]$ ./my_zcat hello.gz hello [user00@fedora14 ~]$ cat /etc/services | gzip -c > test_data.gz ※少し大きいテストデータ [user00@fedora14 ~]$ ./my_zcat test_data.gz | md5sum 77a7f18fe1508eec6c0f2b5e15b8804e - [user00@fedora14 ~]$ md5sum /etc/services 77a7f18fe1508eec6c0f2b5e15b8804e /etc/services

0 件のコメント:
コメントを投稿