diff --git a/src/os/file_unix.go b/src/os/file_unix.go
index 25ce83bf9dc3248261a405959ce81287961c9fb4..a34de8333da49b57aeccf07b358cad9e0be670ee 100644
--- a/src/os/file_unix.go
+++ b/src/os/file_unix.go
@@ -104,13 +104,15 @@ func (f *File) Fd() uintptr {
 // constraints apply.
 func NewFile(fd uintptr, name string) *File {
 	kind := kindNewFile
-	if nb, err := unix.IsNonblock(int(fd)); err == nil && nb {
-		kind = kindNonBlock
-	}
-	f := newFile(fd, name, kind)
+	appendMode := false
 	if flags, err := unix.Fcntl(int(fd), syscall.F_GETFL, 0); err == nil {
-		f.appendMode = flags&syscall.O_APPEND != 0
+		if unix.HasNonblockFlag(flags) {
+			kind = kindNonBlock
+		}
+		appendMode = flags&syscall.O_APPEND != 0
 	}
+	f := newFile(fd, name, kind)
+	f.appendMode = appendMode
 	return f
 }