Задать вопрос
  • Почему файл после многократного количество циклов записи перестает быть доступен для открытия (fopen)?

    @Karpion
    изначально была мысль открывать файл в начале и закрывать в конце (работы приложения). Но это оказалось плохой идеей, поскольку приложение по сути является бесконечным и его остановка по Ctrl + C не даст должного эффекта (файл не будет закрыт и что там будет на момент закрытия - не ясно).
    Ну, держать файл всё время открытым - мне нравится.

    Любое завершение процесса - приводит к закрытию всех открытых им файлов. На уровне fd=open() - закрытие всегда корректное. На уровне fp=fopen() - закрытие корректное в большинстве случаев (по kill -9 - думаю, будет некорректно); ну так на то надо делать fflush().
    И вот тут я бы советовал открыть файл один раз, но через fd=open(), избежав проблем с user-space буферами.
  • Почему файл после многократного количество циклов записи перестает быть доступен для открытия (fopen)?

    @Karpion
    1) Мне не нравится static FILE *sd Я бы сделал локальные переменные внутри обеих функций. При многопоточном программировании со статическими переменными - можно поиметь проблему.
    До кучи можно указать, что они регистровые.

    2) При отладке можно ставить задержку хоть в десять секунд. Тут надо найти источник проблемы, эффективность работы программы на этапе поиска ошибки совершенно не важна.

    3) "После возвращения NULL из fopen в errno -переменной пусто." - противоречит мануалу. Я понимаю, что реальность сильнее мануала - но такого быть не должно. Напишите актуальный на данный код вместо старого в головном посте.

    4) Кстати, errno - статическая. Т.е. при многопоточном программировании - её может затереть другой поток.

    5) По правилам хорошего тона - в зависимости от того, где произошла ошибка, надо возвращать разные значения. Не "-1", как Вы сделали, а разные.

    6) Попробуйте отказаться от оптимизации при компиляции. См.пункт 2.

    7) Проверьте код завершения fclose().

    8) Можно попробовать работать без буферизации. Ваш стиль работы с файлом - как бы намекает, что надо использовать open(), close(), read() и write() - без "f" в начале. Заодно избавитесь от от лишних расходов на буферизацию в user-space, которые здесь бесполезны.
  • Онлайн квест для эникея, как лучше сделать?

    @Karpion
    А чем же "контролер домена + прокси на фряке + почтовый сервер на дебиане + бэкап" не боевое?
  • Можно ли считать busybox полноценным lin... подобным дистрибутовом?

    @Karpion
    Vadim Priluzkiy, Разделяемые библиотеки используются в т.ч. потому, что их разделяемость экономит место. Но если одна копия библиотеки в BusyBox, вторая - в Apache; ну и зачем мне две копии библиотеки?
  • Задачка с нахождением анаграмм в массиве?

    @Karpion
    xmoonlight, Вообще ничего не понятно. Что означает запись "aab = aba = baa"? Это одна строка? Или это равенство произведений трёх переменных? Символ "=" - это символ в какой-то строке или знак равенства?
  • Как отличить мышь от тачпада ноутбука?

    @Karpion
    По идее - тачпад должен обрабатывать ситуацию, когда его коснулись несколькими пальцами; и пальцы двигаются в разные стороны. я видел на Макинтоше обучалку - тачпад действительно может определить, сколько пальцев положены на тачпад, и в зависимости от этого компьютер выполняет разные операции.
  • Можно ли считать busybox полноценным lin... подобным дистрибутовом?

    @Karpion
    Vadim Priluzkiy, Доступны ли библиотеки извне? Например, я ставлю Apache - где ему брать libc?
  • Как подсветить текст?

    @Karpion
    Что жирное - оборачиваем в тэг "B":
    Повествование ведётся от имени безымянного автора, <B>который представился добрым приятелем Онегина</B>
  • Как отключить слежку Google?

    @Karpion
    Юрий Лобанов, Вы так говорите, как будто "бросить вызов системе" - это что-то плохое. Система-то гнилая - не в смысле "непрочная", а в смысле "подлая"...
  • Почему память не может быть 'read'?

    @Karpion
    Рональд Макдональд, Так я не Вам предлагал. Кстати, странно - при Вашей аватарке-то...

    Ruslan-Strannik, Проблемы с железом нигде не исключены. Пока не попробуешь - не узнаешь.

    res2001, Серверная программа не должна аварийно завершать работу. Хотя бы потому, что у неё обычно много запросов в работе.
  • Что выбрать: оригинальная Ubuntu или VirtualBox?

    @Karpion
    Для Вашей задачи - Linux в виртуалке даже лучше, ибо хостинг обычно даёт виртуалку.

    Отличия виртуалки от железки - собственно, в драйверах. Если Вы хотите перейти на Linux полностью, отказавшись от Windows вообще - работайте с железкой. А хостинг - лучше виртуалка.
  • Что выбрать: оригинальная Ubuntu или VirtualBox?

    @Karpion
    Рональд Макдональд, Осталось понять, почему большинство людей хостится на Linux, потом на FreeBSD, а на Windows зостатся малочисленные самоубийцы.
  • Как реализовать алгоритм движения по спирали?

    @Karpion
    Зачотно!
    Но кода как-то слишком много. И надо было бы остановить рисование по достижении границ.

    А где можно взять приличный учебник по Canvas?
  • Как реализовать алгоритм движения по спирали?

    @Karpion
    Вы рассуждаете в правильном направлении, но спотыкаетесь.

    Фраза "В случае вашей спирали радиус увеличивается на одинаковую величину при каждом обороте." тут лишняя. Алгоритм д.б. универсальным при любой спирали.

    Допустим, у нас есть спираль, заданная формулой "r=r(fi)", т.е. радиус зависит от угла по известной формуле.
    Сделаем шаг по углу d_fi, радиус изменится на d_r. Новая точка отстоит от старой на sqrt( (d_fi*r)^2 + d_r^2 )". И это расстояние д.б. равно одному пикселю.

    Значит, берём некий d_fi (можно взять от предыдущего шага). Вычисляем расстояние между старой и новой точками - в пикселях Делим d_fi на это расстояние, делаем шаг, рисуем точку..
  • Что сделать для перезапуска служб автоматически?

    @Karpion
    Значит, надо найти такого демона, который не отваливается при зависании.
  • Какой алгоритм предпочитаете для проверки целостности данных/файлов?

    @Karpion
    Э-э-э...
    Коллизии никогда не случайны. Они строго закономерны. Просто их трудно найти.
    Коллизий - всегда достаточно много. Очень много. Опупительно много. Овер до фига много.
    Вот вопрос с форматом файла - да, интересный. Возможно, сам формат файла такой, что файлов такого формата с заданной содержательной частью - меньше, чем комбинаций хэша.

    Но вот в "Только в этом случае можно вычислить что туда написать." - Вы ошибаетесь. Хороший хэш - это такой, что даже если и есть куда записать, то непомерно сложно вычислить, что именно туда записать.

    Т.е. надо надеяться не на формат файла, а на невычисляемость обратной функции.
  • Как запустить в консоли Linux процесс асинхронно?

    @Karpion
    Андрей Смирнов, Т.к. на вопрос уже ответили, я влезу с непрошеным советом:
    Почитайте какую-нибудь книжку по Shell (sh, csh, bash, ksh, zsh, tcsh) или хотя бы man page; можно начать с Википедии и далее по сылкам. А ещё можно почитать имеющиеся скрипты в любом дистрибутиве Linux/FreeBSD.

    Заучивать это не нужно - нужно иметь представление о том, какие средства там имеются, чтобы при необходимости знать, что вообще можно сделать средствами стандартной оболочки.
  • Какой алгоритм предпочитаете для проверки целостности данных/файлов?

    @Karpion
    Различается лишь вероятность возникновения коллизий, и равномерность их распределения.
    Категорически не так.
    Допустим, у меня есть файл такого формата, что там есть место, куда можно напихать "мусор" - т.е. какие-то поля, куда можно записать что угодно так, что оно не влияет на обработку файла.

    Например, в HTML я могу написать несуществующий тэг или несуществующий параметр к реальному тэгу - и записать туда что угодно текстовыми символами. Например:
    <IMG SRC=картинка.jpg undefined="uhfsuidhfuid">
    Так вот, плохой хэш позволит мне легко/быстро вычислить, что бы такое написать в параметр "undefined", чтобы хэш сошёлся. А хороший хеш вынудит меня перепробовать разные значения и проверять их на коллизию; учитывая большой размер этого хэша, ожидаемое время перебора оказывается больше времени существования Вселенной; а требуемая энергия - больше, чем энергия, излучаемая Солнцем за время существования Вселенной (считая энергию на одно вычисление равной температуре реликтового излучения, т.е. средней энергии кванта реликтового излучения).
  • Какой алгоритм предпочитаете для проверки целостности данных/файлов?

    @Karpion
    Я не телепат, поэтому отвечаю строго на то, что пишут мои собеседники. А именно - на фразу "Для меня 2 разных файла одинакового размера с одинаковым хэшем равносильно сломанному файлу".

    В названии "sha512" - "512" обозначает количество бит в дайджесте. Т.е. это всего лишь 64 байта.

    Если взять файл всего в 65 байт - то на каждый дайджест придётся по 256 разных файлов одинаковой длины. А если брать реальные размеры файлов, то количество коллизий там неимоверное. И проблема только в том, что для данного конкретного файла - найти коллизию (т.е. файл с той же контрольной суммой) очень сложно.

    Т.е. тут мы имеем достаточно типичную для математики ситуацию, когда мы точно знаем, что коллизии есть, и даже примерно знаем, сколько их. Но вот найти эти коллизии - мы не можем.
    (Кстати, я не уверен, что коллизии равномерно распределены. Впрочем, хороший хэш - как раз имеет достаточно равномерное распределение коллизий.)

    Вернёмся к фразе "Для меня 2 разных файла одинакового размера с одинаковым хэшем равносильно сломанному файлу".
    Я уверен, что таких файлов - не два, а неимоверное количество. Но вот предъявить Вам я их не могу.

    Но задача не в том, чтобы предъявить два (или более) файлов с одинаковым хэшем. А в том, чтобы найти алгоритм, который по заданному хэшу будет создавать альтернативные файлы. И там ещё одна проблема - что альтернативные файлы должны не просто иметь нужный хэш, но и нужный формат, иначе его отвергнут на этапе обработки.