Create a file on magnetic tape: Difference between revisions
Content added Content deleted
(Adds Clojure solution) |
(→{{header|Go}}: Simplify and de-clutter by remove unnecessary stuff (except for gzip)) |
||
Line 41: | Line 41: | ||
(or written to a file or a device such as /dev/tape). |
(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, |
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 |
with the contents of the command line <tt>-data</tt> option. |
||
<lang go>package main |
<lang go>package main |
||
Line 49: | Line 49: | ||
"flag" |
"flag" |
||
"io" |
"io" |
||
⚫ | |||
"log" |
"log" |
||
"os" |
"os" |
||
"os/user" |
|||
"time" |
"time" |
||
) |
) |
||
Line 58: | Line 56: | ||
func main() { |
func main() { |
||
filename := flag.String("file", "TAPE.FILE", "filename within TAR") |
filename := flag.String("file", "TAPE.FILE", "filename within TAR") |
||
data := flag.String("data", "", "data for file") |
|||
outfile := flag.String("out", "", "output file or device (e.g. /dev/tape)") |
outfile := flag.String("out", "", "output file or device (e.g. /dev/tape)") |
||
gzipFlag := flag.Bool("gzip", false, "use gzip compression") |
gzipFlag := flag.Bool("gzip", false, "use gzip compression") |
||
flag.Parse() |
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 |
var w io.Writer = os.Stdout |
||
Line 95: | Line 79: | ||
tw := tar.NewWriter(w) |
tw := tar.NewWriter(w) |
||
defer tw.Close() |
defer tw.Close() |
||
⚫ | |||
tw.WriteHeader(&tar.Header{ |
|||
Name: *filename, |
Name: *filename, |
||
Mode: 0660, |
Mode: 0660, |
||
Size: int64(len(data)), |
Size: int64(len(*data)), |
||
ModTime: time.Now(), |
ModTime: time.Now(), |
||
Typeflag: tar.TypeReg, |
Typeflag: tar.TypeReg, |
||
Uname: |
Uname: "guest", |
||
Gname: |
Gname: "guest", |
||
} |
}) |
||
tw.WriteHeader(hdr) |
|||
_, err = |
_, err := w.Write([]byte(*data)) |
||
if err != nil { |
if err != nil { |
||
log.Fatal("writing data:", err) |
log.Fatal("writing data:", err) |
||
Line 113: | Line 96: | ||
}</lang> |
}</lang> |
||
{{out}} |
{{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 - |
% go run tapefile.go -data "Hello World" -gzip | tar -tvzf - |
||
-rw-rw---- 0 guest guest |
-rw-rw---- 0 guest guest 11 11 Aug 13:42 TAPE.FILE</pre> |
||
=={{header|Icon}} and {{header|Unicon}}== |
=={{header|Icon}} and {{header|Unicon}}== |