Check in Daniel Stutzbach's _fileio.c and test_fileio.py
(see SF#1671314) with small tweaks.
The io module now uses this instead of its own implementation
of the FileIO class, if it can import _fileio.
diff --git a/Lib/io.py b/Lib/io.py
index db0ba7e..4c1912e 100644
--- a/Lib/io.py
+++ b/Lib/io.py
@@ -177,7 +177,7 @@
         raise IOError(".fileno() not supported")
 
 
-class FileIO(RawIOBase):
+class _PyFileIO(RawIOBase):
 
     """Raw I/O implementation for OS files."""
 
@@ -243,6 +243,18 @@
         return self._fd
 
 
+try:
+    import _fileio
+except ImportError:
+    # Let's use the Python version
+    FileIO = _PyFileIO
+else:
+    # Create a trivial subclass with the proper inheritance structure
+    class FileIO(_fileio._FileIO, RawIOBase):
+        """Raw I/O implementation for OS files."""
+        # XXX More docs
+
+
 class SocketIO(RawIOBase):
 
     """Raw I/O implementation for stream sockets."""