Режимы открытия файлов не являются специфическими для ruby - они являются частью IEEE Std 1003.1 ( Single UNIX Specification ).Вы можете прочитать больше об этом здесь:
http://pubs.opengroup.org/onlinepubs/009695399/functions/fopen.html
r or rb
Open file for reading.
w or wb
Truncate to zero length or create file for writing.
a or ab
Append; open or create file for writing at end-of-file.
r+ or rb+ or r+b
Open file for update (reading and writing).
w+ or wb+ or w+b
Truncate to zero length or create file for update.
a+ or ab+ or a+b
Append; open or create file for update, writing at end-of-file.
Любой режим, который содержит букву 'b', обозначает двоичный файл.Если «b» отсутствует, то это «обычный текстовый» файл.
Разница между «открытым» и «открытым для обновления» обозначается как:
Когда файлоткрывается с режимом обновления («+» в качестве второго или третьего символа в аргументе режима), и вход, и выход могут быть выполнены в связанном потоке.Тем не менее, приложение должно гарантировать, что за выводом непосредственно не следует ввод без промежуточного вызова fflush () или функции позиционирования файла (fseek (), fsetpos () или rewind ()), а за вводом непосредственно не следуетвывод без промежуточного вызова функции позиционирования файла, если только операция ввода не встречает конец файла.