handle read past end by returning 0s and write past end by extend (i.e. allow growing backing file)