Тупой вопрос, но не получается

Тема в разделе "WASM.HEAP", создана пользователем osrootd, 2 дек 2008.

  1. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    можно ли вписать символ #FFFFFF в середину файла и при этом сохранить оставшуюся часть?
    Или файл оборвётся навечно?

    ЗЫ.: Я пробывал - чето не выходит. Не найду такой символ.
     
  2. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    osrootd
    #FFFFFF - это типа 3 байта FF подряд? можно, почему нет. В любое место файла можно писать любую последовательность байт.
     
  3. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
  4. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Вставлял в Web-страницу (servlet) прям в середину - пол страницы только отображает, остальное - нет.
     
  5. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    osrootd Нужно было сразу определится с форматом файла при вопросе, возможно некоторые теги перекрывают записанные данные
     
  6. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Да?
    Вот тебе код
     
  7. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    А вот тебе результат
     
  8. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Восстановить после (char)0xffffff данные можно или всё уже?
     
  9. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Что-то С-подобное, поэтому могу тупить...
    Не может быть так, что (char)0xffffff вставляется как DWORD, у которого в старшем байте $00 ? Соответственно считается концом строки.
     
  10. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    K10
    Главный приз в номинации Логика 2008!

    Я уже понял, спасибо. Это EOF (прочитал мануалы). Только остается вопрос: где остатки от строки? Как пропустить этот код при чтении? Ведь размер файла-то не изменился!
    И как создать файл с таким набором данных, чтоб его не смог прочитать ни один редактор у которого while (!EOF){...}?
     
  11. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    osrootd
    EOF - это не символ в файле! Это значение (обычно (int)(-1), хотя стандарт на этом не настаивает), которое возвращает, например, функция чтения, когда достигнут конец файла. Если программа правильно организует процесс чтения (т.е. рассматривает EOF как int, а не как char) - тогда проблем никаких не будет.
    Код (Text):
    1. int c; /* int - это важно, если объявить как char, то следущий цикл
    2.             остановится при чтении байта 0xff */
    3. while ((c = fgetc(f)) != EOF) {
    4.     /* теперь рассматриваем 'c' как char, все старшие биты будут 0 */
    5. };
     
  12. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    meduza
    Простите, я описался.

    Имеется в виду, что некоторые проги отказываются читать файл дальше этого символа.
    Как и заметил K10, данный код должен по идее указывать на конец строки, однако:
    Firefox: говорит что данных больше нет
    Kate - (KDE Advanced Text Editor) читает нормально
    more - только полфайла - данных нет
    KHex - весь файл, но криво.
    cat - нормально
    Печать на принтер - полфайла.
    Создал файл с таким именем - гыы. Значок есть, размер тоже есть, открыть и удалить - нельзя.
     
  13. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    Щас проверил в lynx (Lynx Version 2.8.6rel.5 (09 May 2007), ncurses 5.6.20061217(wide)
    Built on linux-gnu Jul 14 2008 20:45:29), firefox (Mozilla Firefox 3.0.4), заменив на этой же странице 'EOF' в фразе "у которого while (!EOF){...}?" на 0xfffff - обе проги видят эти байты как 'яяя' - это в кодировке utf8. При выборе в Firefox кодировки UTF-8 тоже всё показывает без пропуска.

    Подозреваю, что в некоторых программах проблема может быть с режимом чтения - двоичный/текстовый файл.
     
  14. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    И файл нормально создаётся/удаляется :)
     
  15. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    10110111
    Ты чем заменял?
    Если просто ВСТАВИЛ символ или юзал php, то у тебя там не ffffff, а EFBFBF - посмотри в hex-редакторе:) увидишь, я прав.
    Мне чтоб такое сделать с этой страницей, пришлось вообще mayscript заюзать. И формы поисправлять.
    У тебя ï¿¿ï¿¿ï¿¿ это на конце? Не верно.
     
  16. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    я вставлял через vi+xxd, в хекс-едиторе всё как надо
    (у тебя винда или линь? чёт я подумал, что раз Kate, значит, наверно линь?)
     
  17. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    У меня-то линь. RedHat.
    ща файло пришлю

    P.S: подозреваю чето с системой...:)))
     
  18. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    Firefox предлагает сохранить этот файл, обосновывая это тем, что файл бинарный.
    Kate нормально открывает (f-ки квадратиками), но предупреждает, что не будет сохранять его.
    Lynx выводит
    , т.е. ï¿¿ï¿¿ï¿¿ не в конце, а в середине.
    more нормально выводит как через more fff*, так и через cat fff* |more.
     
  19. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    У меня more не читает, а cat читает, ну я уже говорил.
    Вывод: Завтра проверю на мандриве.

    Кстати, у тебя more весь файл выводит?
    cgi-bin заюзать пробывал?
     
  20. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    more всё выводит любыми способами, печать тоже весь файл.
    Не знаю, что это такое, так что не пробовал...

    Какие у тя настройки локали? у меня так: