В Linux и Unix в целом "r"
и "rb"
одинаковы. В частности, указатель FILE
, полученный путем fopen()
файла в текстовом режиме и в двоичном режиме, ведет себя одинаково в Unixes. В окнах и в целом в системах, которые используют более одного символа для представления « новых строк », файл, открытый в текстовом режиме, ведет себя так, как если бы все эти символы были только одним символом, '\n'
.
Если вы хотите переносить чтение / запись текстовых файлов в любой системе, используйте "r"
и "w"
в fopen()
. Это гарантирует, что файлы записаны и прочитаны правильно. Если вы открываете бинарный файл, используйте "rb"
и "wb"
, чтобы неудачный перевод новой строки не испортил ваши данные.
Обратите внимание, что следствием того, что базовая система выполняет перевод новой строки для вас, является то, что вы не можете определить количество байтов, которые вы можете прочитать из файла, используя fseek (file, 0, SEEK_END) .
Наконец, см. В чем разница между текстовым и двоичным вводом / выводом? в comp.lang.c Часто задаваемые вопросы .