diff --git a/windows/mpconfigport.h b/windows/mpconfigport.h
index a9c8b7861e1369c5109075e2b0bcf998dd1f0717..f63f901f0b059c4db9a0e4a0dffd79464f005754 100644
--- a/windows/mpconfigport.h
+++ b/windows/mpconfigport.h
@@ -186,9 +186,6 @@ void msec_sleep(double msec);
 #define restrict
 #define inline                      __inline
 #define alignof(t)                  __alignof(t)
-#define STDIN_FILENO                0
-#define STDOUT_FILENO               1
-#define STDERR_FILENO               2
 #define PATH_MAX                    MICROPY_ALLOC_PATH_MAX
 #define S_ISREG(m)                  (((m) & S_IFMT) == S_IFREG)
 #define S_ISDIR(m)                  (((m) & S_IFMT) == S_IFDIR)
diff --git a/windows/msvc/unistd.h b/windows/msvc/unistd.h
index ece86fa749de47f79a61ac449ef7095724d19a13..add10c8843deb8779203a570dd7e69070a8a061e 100644
--- a/windows/msvc/unistd.h
+++ b/windows/msvc/unistd.h
@@ -26,3 +26,15 @@
 
 // There's no unistd.h, but this is the equivalent
 #include <io.h>
+
+#define F_OK 0
+#define W_OK 2
+#define R_OK 4
+
+#define STDIN_FILENO  0
+#define STDOUT_FILENO 1
+#define STDERR_FILENO 2
+
+#define SEEK_CUR 1
+#define SEEK_END 2
+#define SEEK_SET 0
diff --git a/windows/realpath.c b/windows/realpath.c
index 2fd86aa272f5a69bdaf7170d45903e347602d8bf..c0ed6b84da52af7e13156c973289735fe44ef731 100644
--- a/windows/realpath.c
+++ b/windows/realpath.c
@@ -26,11 +26,7 @@
 
 #include <stdlib.h>
 #include <errno.h>
-#include <io.h>
-
-#ifndef R_OK
-    #define R_OK 4
-#endif
+#include <unistd.h>
 
 // Make sure a path only has forward slashes.
 char *to_unix_path(char *p) {