|
@@ -396,14 +396,24 @@ func TestDup(t *testing.T) {
|
|
|
t.Fatalf("Dup: %v", err)
|
|
t.Fatalf("Dup: %v", err)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- err = unix.Dup2(newFd, newFd+1)
|
|
|
|
|
|
|
+ // Create and reserve a file descriptor.
|
|
|
|
|
+ // Dup2 automatically closes it before reusing it.
|
|
|
|
|
+ nullFile, err := os.Open("/dev/null")
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ t.Fatal(err)
|
|
|
|
|
+ }
|
|
|
|
|
+ dupFd := int(file.Fd())
|
|
|
|
|
+ err = unix.Dup2(newFd, dupFd)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
t.Fatalf("Dup2: %v", err)
|
|
t.Fatalf("Dup2: %v", err)
|
|
|
}
|
|
}
|
|
|
|
|
+ // Keep the dummy file open long enough to not be closed in
|
|
|
|
|
+ // its finalizer.
|
|
|
|
|
+ runtime.KeepAlive(nullFile)
|
|
|
|
|
|
|
|
b1 := []byte("Test123")
|
|
b1 := []byte("Test123")
|
|
|
b2 := make([]byte, 7)
|
|
b2 := make([]byte, 7)
|
|
|
- _, err = unix.Write(newFd+1, b1)
|
|
|
|
|
|
|
+ _, err = unix.Write(dupFd, b1)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
t.Fatalf("Write to dup2 fd failed: %v", err)
|
|
t.Fatalf("Write to dup2 fd failed: %v", err)
|
|
|
}
|
|
}
|