![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Белоснежка |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
Язык: Си
Привет! Я новичок. Задание: Создать виртуальную систему со след. возможностями: 1. create - создаёт виртуальную файловую систему с тем-то именем, такого-то размера (тестировать будут с очень большими). Создаётся в виде двух файлов. Один из файлов (а) имеет заданный размер, в него потом копируются внутренности файлов хостовой системы, во второй файл (б) копируются данные файлов находящихся в вирт. сист.. Файл б не имеет определённого размера 2. add - копирует внутренности файла на хостовой системе в файл а, а его размер, название и т.д. и т.п. в файл б. 3. удаление файлов 4. дефрагментация системы 5. возможность посчитать количество свободного 6. или занятого места Вот. Теперь мой вопрос: для чего в этом проекте нужен malloc(), free()? Их нужно обязательно использовать.. Но я не могу себе это представить с файлами. Для чего резервировать место? Это как-то связано с функцией add? Что делать? :( Теоретически create у меня работает... Получается даже создать файл с размеров в терабайт (КАК?! не понимаю). Но что-то тут не так... :( Помогите мне пожалуйста! Если что-то не понятно, я попробую перефразировать.. :( Вот то, что я пока написала:
Ах да, можно ли сделать свитч тут? Как это сделать с char? Это сообщение отредактировал(а) Белоснежка - 13.7.2013, 00:59 |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Что-то мне подсказывает, что всё это на FAT сильно смахивает... Только имя файла может быть длинным... Например, при дефрагментации пригодится. Из приведённого кода этого не видно ![]() С char * не получится. Можно действовать по-разному, например, так:
Это сообщение отредактировал(а) feodorv - 13.7.2013, 01:59 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
Белоснежка |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
Спасибо большое.. Дефрагментация.. Окей.. А можно спросить ещё пару вещей? ![]() Вот тут:
Почему 64? Я это откуда-то скопировала, но так и не поняла почему. :( И ещё: как резервировать место в самом файле? Вот даже возьмём пример с дефрагментацией.. Это как-то связано с указателем на файл? |
||||
|
|||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Ну это какой-то компромисс: если, скажем, указать 256, то обычно большинство байт из этих 256 использоваться не будет (если, конечно, пользователь не мазохист и не задаст в качестве имени Вашей файловой системы строку из 200 символов; ну а 32 или 16 может оказаться маловато. В любом случае контроль переполнения стоИт - snprintf'у передаётся размер отведённого под имя буфера.
Честно говоря, задача, стоящая перед Вами, крайне непростая, и кто только додумался давать её новичку... Какой именно указатель на файл Вы имеете в виду? Один из datei? Пользуйтесь функциями fseek, fteel, fwrite, fread, fstat, они помогут Вам зарезервировать нужное место в нужном файле... У меня к Вам тоже есть вопрос. В задании упоминается 2 файла, но я так и не понял, какую смысловую нагрузку будет нести каждый из них. Есть 2 варианта: 1/ а - оглавление файловой системы; б - содержимое файлов файловой системы 2/ а - содержимое файлов файловой системы; б - оглавление файловой системы В оглавлении файловой системы будут находиться атрибуты файлов (имя, размер, указатель на содержимое файла). Какой вариант верен? Перечитал ещё раз задание, вроде, второй... Мне тут подумалось, что при каждой операции с файловой системой придётся читать оглавление в память, а посему malloc(), free() ещё очень даже пригодятся... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
Белоснежка |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
Вроде второй.. Ну файл с расширением "store" должен содержать содержимое файлов, а другой всё остальное.. В задание написано, что нужно использовать мэллок и фри для динамичного использования памяти.. Всё таки придётся взять 256, т.к. нам сказали, что данные и название могут быть оооочень большими. Переменные для вычисления размера файла ".store" должны уметь принимать максимально возможное значение.. А вообще да, сволочи они.. Вон в прошлом году дети писали игрушку ((( Это сообщение отредактировал(а) Белоснежка - 15.7.2013, 21:11 |
|||
|
||||
fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: 1 Всего: 1 |
тут нужны динамические строки.. Добавлено через 5 минут и 6 секунд здесь лучше использовать именованную константу здесь лучше использовать sizeof(store) -------------------- undefined |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Зачем? Ок. Давайте называть файл-а хранилищем, файл-б - оглавлением. Тогда пора задуматься над архитектурой файловой системы. Я предлагаю самую-самую простую:
Соответственно, при создании файловой системы нужно будет:
Сделать всё это можно по-разному, но раз Вас просят malloc/free, то давайте так:
Здесь размер хранилища определён как 4 мегабайта (пока хватит). Ждём вашего кода (пока для create). -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
Белоснежка |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
Спасибо. Отпишусь очень скоро. После экзаменов. ![]() |
|||
|
||||
Белоснежка |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
Короче,
я решила оставить структуру if, else if.. А так же уже придумала как я собираюсь сохранять данные. ![]() А так же я поняла для чего нужен мэллок.. Мне нужно создать динамичный массив. Спасибо всем за внимание и помощь ![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Белоснежка, а что плохого в том, что ты выложишь свой код?!? Это твой код. И пусть прогугливают на здоровье. Главное, что за тебя не писали. И ты сама принимала решения.
|
|||
|
||||
SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: нет Всего: 23 |
я помню у друга был препод, который если находил в гугле фрагменты проги, то орал что она слизана и задание не засчитуется, так что может там такая же ситуация, хотя если уже поставили оценку и приняли задание, то смело можете выкладывать.
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
можно серым шрифтом в конце сообщения написать "Привет проф. Иван Иванычу".
![]() |
|||
|
||||
Белоснежка |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
Может быть и так, но рисковать не хочется.
![]() ![]() Другой вопрос.. Я тут вписала целый массив в файл. А можно его считать не как стринг, а как обычный код? То есть чтоб он заработал. ![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
вопрос не совсем полный (хотелось бы знать как записала). но ответ "скорее всего да".
|
|||
|
||||
Белоснежка |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
Вот так ![]() Конечно можно записать только содержание массива, но он будет гигантский, многомерный, и его будет трудно при считывание содержания строить заного.. Это сообщение отредактировал(а) Белоснежка - 9.8.2013, 19:39 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |