В комментариях к вопросу от @David C. Rankin
"Хорошо, fread / fwrite читает и записывает байты (двоичные данные - если вы записываете, затем читаете с одинаковым количеством байтов - вы получаете то же самое обратно). Если вы хотите читать и писать текст, в котором вам нужно беспокоиться о переносе строк, например, c .., fgets / fputs. или fprintf "
Так что я думаю, что никогда не узнаю, что я читаю с помощью fread, если я не знаю что я написал в fwriite?
"Правильно, посмотрите на тип вашего буфера в справочной странице fwrite (3) - Linux, это тип void *. Это просто начальный адрес, который fwrite может использовать при записи сколь угодно большого количества байтов вы сказали ему писать. (очевидно, вы знаете, что он пишет) То же самое для fread - он просто читает байты - вы должны знать, что вы читаете (или, по крайней мере, формат этого). Это то, что двоичный I / О, это всего лишь байты - от вас, программиста, зависит, что вы пишете и читаете, и как распаковывать его, в противном случае используйте форматированный ввод-вывод и строки, слова и т. Д. c. . "