Create a file on magnetic tape: Difference between revisions

→‎{{header|Go}}: Simplify and de-clutter by remove unnecessary stuff (except for gzip)
(Adds Clojure solution)
(→‎{{header|Go}}: Simplify and de-clutter by remove unnecessary stuff (except for gzip))
Line 41:
(or written to a file or a device such as /dev/tape).
The tar archive will contain a single file, called <tt>TAPE.FILE</tt> by default,
with the contents of the command line <tt>-data</tt> option or <tt>stdin</tt>.
<lang go>package main
 
Line 49:
"flag"
"io"
"io/ioutil"
"log"
"os"
"os/user"
"time"
)
Line 58 ⟶ 56:
func main() {
filename := flag.String("file", "TAPE.FILE", "filename within TAR")
dataStrdata := flag.String("data", "", "data for file, or stdin if empty")
outfile := flag.String("out", "", "output file or device (e.g. /dev/tape)")
gzipFlag := flag.Bool("gzip", false, "use gzip compression")
flag.Parse()
 
userinfo, err := user.Current()
if err != nil {
log.Fatal(err)
}
 
data := []byte(*dataStr)
if len(data) == 0 {
data, err = ioutil.ReadAll(os.Stdin)
if err != nil {
log.Fatal(err)
}
os.Stdin.Close()
}
 
var w io.Writer = os.Stdout
Line 95 ⟶ 79:
tw := tar.NewWriter(w)
defer tw.Close()
"io/ioutil"w = tw
 
hdr := tw.WriteHeader(&tar.Header{
Name: *filename,
Mode: 0660,
Size: int64(len(*data)),
ModTime: time.Now(),
Typeflag: tar.TypeReg,
Uname: userinfo.Username"guest",
Gname: userinfo.Gid"guest",
})
tw.WriteHeader(hdr)
 
_, err := tww.Write([]byte(*data))
if err != nil {
log.Fatal("writing data:", err)
Line 113 ⟶ 96:
}</lang>
{{out}}
<pre>
<pre>% go run tapefile.go -h
Usage of tapefile:
-data="": data for file, or stdin if empty
-file="TAPE.FILE": filename within TAR
-gzip=false: use gzip compression
-out="": output file or device (e.g. /dev/tape)
 
% go run tapefile.go -data "Hello World" -gzip | tar -tvzf -
-rw-rw---- 0 guest guest 11 611 Aug 1213:42 TAPE.FILE</pre>
 
=={{header|Icon}} and {{header|Unicon}}==
Anonymous user