diff --git a/libc/file.cc b/libc/file.cc
index c8795e393bb256a1f4a2de2a20cff6a841067780..97d0b90e716d966aaa0dade22f0c7ea65ad3f356 100644
--- a/libc/file.cc
+++ b/libc/file.cc
@@ -1,6 +1,3 @@
-#define __FILE_defined
-class FILE;
-
 #include <stdio.h>
 #include <fcntl.h>
 #include <string.h>
@@ -9,12 +6,10 @@ class FILE;
 #include "libc.hh"
 #include "fs/fs.hh"
 
-class FILE {
+class std_file : public _IO_FILE {
 public:
-    explicit FILE(int fd);
-    ~FILE();
-private:
-    int _fd;
+    explicit std_file(int fd);
+    ~std_file();
 };
 
 class __dirstream {
@@ -26,9 +21,9 @@ private:
     fileref _file;
 };
 
-FILE::FILE(int fd)
-    : _fd(fd)
+std_file::std_file(int fd)
 {
+    _fileno = fd;
 }
 
 __dirstream::__dirstream(fileref file)
@@ -63,7 +58,7 @@ FILE* fopen(const char* fname, const char* fmode)
     if (fd == -1) {
         return nullptr;
     }
-    return new FILE(fd);
+    return new std_file(fd);
 }
 
 DIR* opendir(const char* fname)