wedtorque Ответов: 3

Как fread() и fwrite() на самом деле работают в программировании на языке Си ?


я работаю над проектом плоского файла базы данных с использованием языка Си .я создал структуру с несколькими членами . я использую fwrite () для записи их в двоичный файл и fread () для извлечения данных .Два моих главных вопроса

1-й можно записать структуру в текстовый файл ? я не видел ни одного хорошего примера ,но разве это практически неправильно-писать его в текстовом формате ?

2-й как работают эти fread() & fwrite().они работают с блоком данных, как они получают адрес следующего блока .я имею в виду, что у нас есть указатель, но файл не имеет никакого адреса, так как указатель переходит к следующему блоку ?

Что я уже пробовал:

я пробовал, но это работает, но почему и как ?

3 Ответов

Рейтинг:
2

bling

1st can we write structure in text file ? i have seen no good example .is it practically wrong to write it in text format ?


Если под структурой вы подразумеваете двоичные данные (например, не ASCII), то нет, вы не должны использовать текстовый режим. Откройте файл как двоичный, если вы хотите работать с байтами без применения некоторых правил среды выполнения C (например, "приготовленных" данных), которые влияют на возврат каретки, перевод строки и - для некоторых платформ - маркер конца файла.

2nd how these fread() & fwrite works().they operate on a block of data how they get the address of next block .i mean we do have the pointer but file doesnt have any address so how the pointer go to next block ?


Об этом позаботится файловая система. Существует неявный адрес или смещение файла, где хранятся данные. Каждый вызов функции fwrite приводит к перемещению смещения, поэтому по умолчанию вы всегда добавляете данные в файл. Вы также можете изменить это смещение с помощью fseek и изучить компенсируется через неправильное поведение ftell. Вам не нужно беспокоиться о том, как организованы дисковые сектора, блоки или кластеры.


Рейтинг:
1

CPallini

Это называется Serialization, видеть Сериализация-Википедия, свободная энциклопедия[^].

Цитата:
разве это практически неправильно-писать его в текстовом формате ?
Нет,это не так. На самом деле некоторые механизмы сериализации используют текстовые файлы. Однако это немного неэффективно.

Взгляните на эту страницу: C-методы сериализации-переполнение стека[^].


Рейтинг:
0

Patrice T

Цитата:
1-й можно записать структуру в текстовый файл ?

- Да, можешь.
Цитата:
я не видел хорошего примера .

Это ваш дизайнерский выбор. Вы сами решаете, как перевести структуру в файл и как вернуть ее обратно в структуру.
Для этого все время используются XML-файлы. Структуры переводятся в XML и наоборот.
Цитата:
разве это практически неправильно-писать его в текстовом формате ?

Вы проектируете выбор. См. раздел XML-файлы.
Цитата:
2-й как работают эти fread() & fwrite().они работают с блоком данных, как они получают адрес следующего блока .я имею в виду, что у нас есть указатель, но файл не имеет никакого адреса, так как указатель переходит к следующему блоку ?

Похоже, вам нужно вернуться к основам C/C++
Язык программирования Си - Википедия, свободная энциклопедия[^]
https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf[^]
http://www.ime.usp.br/~ПФ/Керниган-Ритчи/с-Программирование-электронные книги.формат PDF[^]