r   read
      w   create file or truncate to zero length for write
      a   append; open or create file for writing at end-of-file
      rb  binary read
      wb  binary write
      ab  binary append
      r+  open file for update, read and write
      w+  truncate to zero length or create file for update
      a+  open or create file for update, writing at EOF
      rb+ binary file for update, read and write
      wb+ truncate to zero length or create binary file for update
      ab+ append; open or create binary file for update, writing at EOF