// 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 件のコメント:
コメントを投稿