![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Боюсь, для этого понадобится встроенный интерпретатор языка C
![]() Белоснежка, объясните, пожалуйста, смысл происходящего... Это сообщение отредактировал(а) feodorv - 9.8.2013, 22:48 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Не нужен встроенный интерпретатор.
-------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
А что нужно? ![]() Белоснежка не хочет записывать данные в файл, а хочет всё записать в виде текста программы на C. И чтобы сразу это всё выполнить можно было ![]() -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
Белоснежка |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
Ага.. Но это невозможно.. :( Вот теперь нужно думать.. Как запихнуть факты в файл.. Сначала ведь все блоки пусты, а если в блок что-то добавляется, нужно написать с какого по какое место в блоке, название файла и ещё кучу ненужного дерьма, чтоб потом ещё и дефрагментацию сделать :(((( А в блок могут ещё и несколько файлов поместиться.. И как это всё записывать в файл? И вообще, можно прыгать на определённую строку в файле? По номеру? Эх.. Запить что ли.. ![]() Это сообщение отредактировал(а) Белоснежка - 13.8.2013, 01:22 |
|||
|
||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Да ну вас.. привыкли с оболочками работать.
кто мешает сделать формовку, на лету сгенерить файл, тут же вызвать компилятор, компильнуть, проверит наличие эхе-шника и запустить. а можно под это дело и makefile соорудить. Да и вообще на елансе для тестовых задач есть такие приблуды, вводишь текст проги, она либо компиляет (тест пройден), либо ругается на ошибку.но я там походу с эскейп-последовательностями никак не разберусь, 100% нормальные тексты прог мне выдаёт в ответах как ошибочные. Добавлено через 13 минут и 17 секунд метки вроде ещё никто не отменял. правда, плохой стиль, говорят.
-------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Не работайте с текстовым файлом. Работайте с бинарным. Разработайте формат записи оглавления для хранимого файла (фиксированного размера). Например:
Пишите и читайте из файла-оглавления сразу всем массивом структур. Размер файла узнаётся функциями stat/fstat+fileno, запись и чтение блоков памяти - функциями fread/fwrite, перемещение по файлу - функцией fseek, позиция текущего указателя - ftell. Тогда число записей в файле-оглавлении определяется через (размер_файла-оглавления / sizeof(struct file_entry)), позиционирование указателя на запись номер N как fseek( f, N*sizeof(struct file_entry), SEEK_SET). Но я всё-таки предлагаю Вам каждый раз целиком в память читать содержимое файла-оглавления (вот и пригодятся malloc/free), в памяти с ним же и работать (добавить/удалить файл, дефрагментировать), затем целиком записать обратно (то есть полностью переписать файл-оглавление). Всё до безобразия просто, если отойти от строчной структуры))) -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
Белоснежка |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
Вот в этом месте у меня вопрос: А что если файл-оглавление будет оооочень большим? Понимаете, задание обязует использовать оооочень большие числа/большое количество знаков.. И вообще меня всё достало :( Другой вопрос: я когда создаю файл-содержимое, я создаю его определённого размера.. Но если в этот файл что-то записать, то его размер растёт... А мне нужен фиксированный. :( Как это сделать? |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Белоснежка, а кто тебе мешает пользоваться lseek/fseek для смены позиции в файле? Установи позицию на середину и пиши. Только имей в виду, что в этом случае ты затрешь старую информацию. И с текстовыми файлами этот метод работает очень плохо (или надо делать фиксированную ширину строки, или использовать бинарный).
|
|||
|
||||
Белоснежка |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
А как сделать бинарный? Линуксовский компилятор игнорит букву "б" при открытие файла.. Любая функция записи в файл переписывает содержимое? А можно "удалить" запись неизвестной длины? Вот скажем я хочу удалить строчку номер 6367. Это реально без полной переписи файла? Нам сказали, что из файла-оглавления минимум 2 блока поместятся в main memory. |
|||
|
||||
feodorv |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Ну, если хранить в хранилище огромную кучу файлов длинной по 1 байту, то да, размер оглавления станет оооочень большим)))) Но это всё лирика. У Вас на один файл в оглавлении уходит 300 байт. Если даже запихнуть в хранилище 100.000 файлов, то размер оглавления составит 30мег, вполне терпимая цифра. Более того, всегда от прямого чтения в память можно перейти к более изощрённым методам работы с оглавлением (mmap, переменный размер записи в оглавлении, просто указатели на записи в оглавлении и т.д.), но это можно будет сделать потом. Сейчас нужно наладить схему. И схема такова, что работать нужно с бинарным форматом, не строковым.
Числа чего? Знаки чего? Каков порядок чисел (что значит "оооочень большие")? Ну так надо философски смотреть на вещи. Программирование требует выдержки, и даже ленности в некоторых вопросах)))) А вот меня, например, достаёт Ваше нежелание поделиться кодом, приходится всё додумывать, и не поймёшь ещё при этом, правильно или нет...
Вопрос не понял. Судя по всему, Вы записываете в конец файла. Тогда да, размер будет расти. Если же писать внутри файла, не выходя за его границы, то и размер хранилища никак не может увеличиваться... Ответ был дан, и неоднократно:
После того, как файл-хранилище был создан (не более 2 гигабайт, иначе придётся менять способ доступа к нему), он открывается на чтение-запись "r+", чтобы в него что-то записать. Текущая позиция в файле при этом - ноль. Она меняется посредством вызова fseek. Но если файл отрывается на "append" - "a+", то любая запись будет осуществлена в конец файла, при этом его размер увеличится. Вопрос: как Вы открываете файл-хранилище? Добавлено через 9 минут и 18 секунд В Линуксе/Юниксах это без разницы, любой файл - бинарный. Просто структура у него не строковая, а иная. В бинарном файле могут встречаться "непечатные" символы, даже символ '\0'. Если не писать в конец файла, то да.
Так не выйдет, если хочется высвободить то место, которое ранее занимала строчка. Но опять-таки, откуда такая любовь к строчкам?
Опять не понятно. Почему "минимум", почему "два", что такое "блок"... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||||||
|
|||||||||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
||||
|
||||
Белоснежка |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
Извините, вопрос исчерпан.. Неожиданным образом.,..
Это сообщение отредактировал(а) Белоснежка - 5.10.2013, 23:48 Присоединённый файл ( Кол-во скачиваний: 12 ) ![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Белоснежка, расскажешь каким?
|
|||
|
||||
Белоснежка |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
Я практически полностью переписала код. Не использовала мэллок, только кэллок.. И вообще всё вдруг пошло как по маслу... Были мелкие проблемы из-за невнимательности. В общем всем спасибо.. Мне видимо нужно было один раз написать о своей проблеме и я сразу находила решение )) Всё готово, всё прошло. Спасибо.
![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |