package main import ( "bytes" "fmt" "io" "io/ioutil" "os" ) func main() { tmpfile, err := ioutil.TempFile("", "copy_file_range") if err != nil { fmt.Fprint(os.Stderr, err) os.Exit(1) } status := copy(tmpfile) os.Remove(tmpfile.Name()) os.Exit(status) } func copy(tmpfile *os.File) int { cmdline, err := os.Open("/proc/self/cmdline") if err != nil { fmt.Fprintln(os.Stderr, err) return 1 } defer cmdline.Close() if _, err := io.Copy(tmpfile, cmdline); err != nil { fmt.Fprintf(os.Stderr, "copy failed: %v\n", err) return 1 } if err := tmpfile.Close(); err != nil { fmt.Fprintln(os.Stderr, err) return 1 } old, err := ioutil.ReadFile("/proc/self/cmdline") if err != nil { fmt.Fprintln(os.Stderr, err) return 1 } new, err := ioutil.ReadFile(tmpfile.Name()) if err != nil { fmt.Fprintln(os.Stderr, err) return 1 } if !bytes.Equal(old, new) { fmt.Fprintf(os.Stderr, "got %q want %q\n", new, old) return 1 } return 0 }