• Как правильно посчитать время выполнения fread/fwrite (gcc)?

    @HighMan Автор вопроса
    Нет. У libc нет интерфейсов которые бы могли это гарантировать.


    А как же fsync?

    Вы извините за глупые вопросы.
    Я давно тому назад писал на C/C++ но под windows.
    Потом очень долгое время C/C++ не использовал, а сейчас понадобилось под Linux, вот я и "плаваю".
  • Как правильно посчитать время выполнения fread/fwrite (gcc)?

    @HighMan Автор вопроса
    fread/fwrite -- плохой выбор для этого, потому что это функции библиотеки C, т.е. между ними и ядром ОС ещё один слой абстракции.


    Какие тогда посоветуете функции? read/write?

    Неа. Тот кто читает маны должен приучаться делать это до конца. В случае fclose -> fflush там написано следующее:


    Тут не до конца понял.
    fflush(f);
    fclose(f)

    Так должно быть, что бы данные оказались на диске?
    Ну и если вы не советуете использовать fread/fwrite, то вместо fflush flush?
  • Тонкости настройки xfce4?

    @HighMan Автор вопроса
    Извините, можно поподробнее по пункту 2?
    " Вот как я делаю: в настройках системы ищу пути этих мест и устанавливаю просто на ~. Только рабочий стол устанавливаю на свою директорию ~/.desktop"
    Не понятно.
  • Какой посоветуете не сложный editor для Flask?

    @HighMan Автор вопроса
    Антон Коновалов, да, мне нужен редактор именно для фронтенда.
    В качестве бакэнда используется Flask.
  • Как взаимодействовать с txt файлом, находящимся на сервере, с помощью с++?

    @HighMan
    rPman, php 7.3 вроде.
    PHP не виновен в утечках памяти. В нем, попросту, не предусмотрен такой механизм, что и позволяет ему крыть по скорости Python.
    PHP умеет ТОЛЬКО выделять память, но не высвобождать ее. Нет сборщика мусора и нет изголений по обеспечению его работы.
    Это не баг. Это фича!
    PHP изначально разрабатывался для работы с HTTP сервером.
    Т.е. скрипт запускается, выполняет какие-то действия и умирает. Пофиг на то, что он не высвобождал память. После смерти за ним приберется система.
  • Как в initrd вызвать bash/sh?

    @HighMan Автор вопроса
    CityCat4, "М-да, уж на что я любитель костылей и покопаться в потрохах системы.... но до такого пока не доходил, потому что у меня сразу возникает вопрос - а накуа? Ведь есть же dracut? "
    А если нет?
    Думаете я из квасного патриотизма ковыряюсь с altlinux?
    Ни разу!
    Выбора нет. Altlinux 8 SP или Astra Linux Smolensk. Со вторым мне "посчастливилось" столкнуться несколько ранее.
    Если бы у меня была возможность выбирать дистрибутив, то уж точно, на "отечественные" я бы даже смотреть не стал. Debian или Centos Stream. Может, даже, Fedora.
    Но имеем, что имеем. Шаг в сторону - попытка бегаства. В Украину.
    Спасибо хоть на рабочий комп не распостраняются требования, и я, возможно, если найдется время, поставлю любимую Федору.
  • Как в initrd вызвать bash/sh?

    @HighMan Автор вопроса
    rPman, ключи запуска - хренота из под ногтей :)
    Ведру они до свечки.
    Их использует лишь initrd.
    Можно, вообще, обойтись без параметров, если самому собирать initrd.
    Не так сложно найти root раздел и все остальное.
    Я, правда, использую параметры, передаваемые ведру. Я передаю initrd UUID раздела, где лежит root squashfs и UUID RW раздела.
    Впрочем, скорее всего, я буду переделывать.
    Идея в следующем: передать юзверю систему, где он при всем желании, ни чего поломать не может.
    Потому, я сендвич рут раздела буду делать с RAM диском, а всечто нужно сохранить, будет монтироваться.
    Информбез - жуть с ружжом, но такой подход выбивает почву из под ног их придирок. Самое главное: initrd может при загрузке проверять cheksum root.sfs и отказываться грузить его, если контрольная сумма не совпадает с прошитой в initrd. Безпасники, после подобного, даже не знают к чему придраться.
    Ну и дополнительные плюшки: обновить/заменить ВСЮ систему может даже юзверь сиволапый. ПО большому чету запустить немудреный скрипт с флешки, и готова новая система! Пять минут ожидания и готова полноценная система, которую еще и поломать крайне затруднительно.
    Сейчас, правда, у меня еще один проект: в initrd запихнуть функционал для быкапа системы. Сама технология быкапа уже отработана. Немудреный скрипт делает полный оффлайновый бэкап нужного раздела. Но этот скрипт у меня живет в лайв системе, котрая ему на хрен не нужна. Достаточно впихуть невпихуемое в initrd и радоваться жизни.
    Я сократил размер initrd до 900кб. Как бы, без вопросов, в него можно напихать еще сотню МБ. Эксперементальным путем установлено, что грузится initrd весом в 170 мб. С большим размером могут возникнуть проблемы. Но мне, по скромным подсчетам, понадобится запихнуть разнобезобразного ПО, на десяток мегабайт.
    И тогда из initrd можно будет делать даже сетевые бэкапы.
  • Как в initrd вызвать bash/sh?

    @HighMan Автор вопроса
    CityCat4, что бы initrd вырос до 190 всего-то нужно туда в него впихнуть ПОЛНОСТЬЮ /lib/modules/$(uname -r), что я и сделал, т.к. не знал, какие моды понадобятся ведру, что бы, хотя бы, узреть диски!
    Потом не было времени разбираться. Ну большой и большой. Хрен с ним.
    Немного времени нашлось лишь вчера. Разобрался (поверхностно с depmod) полазил по modules.dep (обычный текстовой файл). Там модули со всеми зависимостями. Небольшой скрипт и в initrd попадают лишь те моды, которые мне нужны или те, которые, возможно, будут нужны. Так размр ужался до 900 кб. Можно еще немного почистить, но зачем?
    Проще озаботится и написать скрипт, который будет полностью генерировать нужный initrd и запихивать в него все нужные модули.
    Вполне возможно, что это изобретение велосипеда.
    Есть же make-initrd!
    Но, блин, сначала нужно изучить как им пользоваться. Дальше, наверняка, окажется, что -то нужное мне там не предусмотрено и придется изобретать костыллинг.
    Временные затраты на изучение make-initrd и последующий костылинг, будут несоизмеримо больше, чем написать с чистого листа, особенно, когда начал понимать что там к чему.
  • Как взаимодействовать с txt файлом, находящимся на сервере, с помощью с++?

    @HighMan
    rPman, я ооочень давно забил на PHP. Во первых меня мутит от вебдизайна - не мое.
    Во вторых он пригоден для повседневных задачь с оговорками.
    На моей позапрошлой работе кучу всякого системного хлама реализовывали на PHP. Ну а чо? Язык быстрый, не чета Python и bash.
    Все было замечательно пока... Пока не начались гигантские утечки памяти в приложениях, которрые крутятся долго.
    Скорость пыхи обусловлена тем, что она не заморачивается "сбором мусора". И это риводит к весьма печальным последствиям. Память лишь выделяется и ни как не высвобождается. Это не напрягает когда скрипт вызывается на веб сервере. Скрипт вызван, он отработал и умер. Систем сама высвободила память. Если же скрипт должен работать долго, то кирдык. Он сожрет всю память.
    Что же кается C, C++ то я их очень люблю. Как бы, с них я и начинал тернистый путь IT. Но чем дальше, тем реже я их использую :( С текстовыми данными работать мучение, а уж если озаботится поддежкой UTF-8, то ну на хрен!
  • Использовать лли ext4, или exfat для внешнего SSD, если планирую использовать его на всех 3х ОСях?

    @HighMan
    Adamos, точ в точ, как и я. Остался лишь Linux и если приходится сталкиваться в виндой, то чувствую себя не особо комфортно.
    В то же время, большинство коллег по работе используют винду и ради коммуникациями с ними нужно использовать нечто универсальное. Потому FAT32, что накладывает существенные ограничения на размер файла, или exfat. А если нужно сохранить права доступа с атрибутами, то tar с этим прекрасно справляется.
    Еще раз предостерегу от использования ntfs-3g. Я, на пустом месте, потерял почти все данные с раздела. Причем, ни чего не предвещало неприятностей. Все работало. Некорректных выключений было совсем не много. Потом линь начал хныкать и умолять проверить раздел. Ему столь тонкое дело я не доверил и додумался проверить средствами винды... Результат меня не порадовал. Я потерял почти все данные.
  • Как в initrd вызвать bash/sh?

    @HighMan Автор вопроса
    Огромное спасибо!
    Пока не проверил, но это первый осмысленый совет во всей теме.
    Как разберусь - обязательно выложу тут решение.
    Вообще, нужно создать некую викимучильню, куда выкладывать найденные решения с кратким описанием и заскриптованным решением.
  • Как в initrd вызвать bash/sh?

    @HighMan Автор вопроса
    CityCat4, в initrd живого рабочего Altlinux есть bash. Я сам удивился.
    Что касается редактирования и даже полной сборки initrd, то это не высшая магия. Совсем.
    Сами посмотрите, ЧТО должен делать initrd. Богатого функционала не предусмотрено.
    Другое дело, что тестировать initrd долго.
    Ещё сложно, по началу, собрать необходимое количество модов.
    Если перетаскивать их все, то ,initrd разрастается до неприличия.
    Пришлось заняться модулями.
    Спасибо доброму человеку, который посоветовал рыть в сторону depmod.
    Почитал. Понял не много, по началу, но идея появилась.
    Раскрываю как подойти к проблеме, не обладая глубокими познаниями по модам
    Собираем initrd со всеми модами. Грузимся и когда обнаружили нужные устройства вызываем lsmod и сохраняем результат.
    Дальше я написал скрипт, который "парсит" выдачу lsmod и modules.dep.
    Таким образом генерируем нужную пачку модов. Дальше, например, запускаем на виртуалке и смотрим какие моды загружены. Добавляем их.
    Мне удалось немного ужать конечный размер initrd. Со 190mb ,до 900кб.
  • Как в initrd вызвать bash/sh?

    @HighMan Автор вопроса
    Алексей Черемисин, видел и чтл?
    Даже на Хабре статейку прочёл, где один товарищ диферамбы пел этому make-initrd. Только вот объяснить чем же он так крут не удосужился.
    Тот initrd что я взял в качестве исходного, скорее всего, сделан с помощью make-initrd. Честно говоря, ни одного доброго слова в его сторону сказать не могу.
    Несчастный init скрипт вызывает ещё пару десятков скриптов и разобраться в нем - чёрт ногу сломит.
    Вроде, у init скрипта, не такая уж сложная задача: загрузить моды, смонтировать root раздел и передать ему управление.
    И ради этого нужна пара десятков скриптов?
    Я, по началу, пытался забраться в той писанине, что бы впихнуть нужный мне функционал, и потратил на это ни мало времени.
    Потом пршсто стёр его к чертям собачьим и написал заново.
    У меня initrd грузит squashfs образ root раздела, накладывает на него RW слой (overlay), да ещё и основательно парсит переданные ядру параметры.
  • Как в initrd вызвать bash/sh?

    @HighMan Автор вопроса
    rPman, ну насчёт того, что ядро и initrd из виртуаки не будут работать на реальной машине - сильно сомневаюсь. Скорее некоторые сложности (не значительные) могут быть с переносом реальной машины в виртуал. Впрочем я такое не встречал ещё ни разу.
    Я же использую vmlinuz & initrd с рабочей реальной машины.
    А для другой задачи я, вообще, использовал root из lxc, запакованную в squashfs с последующим overlay.
  • Использовать лли ext4, или exfat для внешнего SSD, если планирую использовать его на всех 3х ОСях?

    @HighMan
    Adamos, а как вы используете внешний носитель?
    Вы заморачивайтесь с правами доступа к файлам?
    Если, вдруг, вам нужно перетащить нечто со всеми правами доступа, то просто запихивает это нечто в tar. Я не прав?
    Мое ИМХО - exfat. Все 3 системы его воспринимают без танцев с бубном.
    По идее, можно бы и ntfs, но я бы не советовал. Linux с ntfs работает очень коряво.
  • Как взаимодействовать с txt файлом, находящимся на сервере, с помощью с++?

    @HighMan
    Вообще, не понятно, на хрена это реализовывать на СРР.
    В разы быстрее нарисовать скрипт на python или даже bash.
    А если учитывать, что файл текстовой, что следует из расширения, то работать с ним на С или даже СРР - жуткий мазохизм.
    Хуже с текстом работает, разве что, assembler.
  • Как в initrd вызвать bash/sh?

    @HighMan Автор вопроса
    В качестве донора, в силу ряда причин, пришлось взять Altlinux. У него в initrd уже bash есть. Есть и есть. Всегда можно убрать.
    А ещё лучше собрать с чистого листа. Но речь не о том!
    В init скрипте что-то нужно прописать дополнительно, для корректной работы оболочки.
    Может это TTY, может что-то с DISPLAY мутить нужно. Я с этими суЧностями совсем не знаком.
    Что же касается сборки initrd и убеждения его правильно работать - некоторый опыт есть.
    Просто мне сейчас нужно сделать своеобразную систему бэкапа, которую нужно запихнуть в initrd, что возможно, но нужна взаимодействовать с пользователем, а это пока работает лишь на виртуалке, а вот на реальной машине все совсем иначе. Или не воспринимает клавиатуру, или не обращает внимание на попытки тормознуть скрипт с помощью вызова шела.
  • Свой почтовый сервер взамен яндекс почты для домена?

    @HighMan
    Полностью поддерживаю.
    Свой почтовый сервер, конечно, круто, но он требует постоянного ухода.
    Поставил и забыл? Ну-ну.
    Ежедневные DDOS атаки, попытки взлома.
    Ещё, иногда, попадаешь в black list. Вообще, на пустом месте.
    Просто несколько кулхацкеров, обломавши зубы, в качестве мести, строчат кляузы в блак листы.
  • Как восстановить загрузчик Orange pi?

    @HighMan
    Grub же загружается и дает свою консоль.
    Попробуйте ввести комманды:
    ls /
    ls (hd0,1)/

    Где-то там будет информация о новых UUID.
    Далее искать по prtitions grub.cfg
    Когда нашли, то посмотрите его через cat. Например:
    cat (hd0,2)/grub/grub.cfg
    set root=(hd0,2)

    Последняя команда позволит дальше не писать (hd0,2) для выполнения команд.
    Теперь осталось воспроизвети вручную записи liux и initrd и потом boot
    Если все сделали правильно, то загрузится ваша система. По крайней мере, загрузятся vmlinuz и inird. На этом этапе снова встанете, т.к. в /etc/fstab, так же, не актуальные значения UUID, но все таки уже проще. Нужно вручную смонтировать root раздел и поправить в нем fstab.
    Дальше, скорее всего придется перегружаться и все по новой, только теперь вы уже знаете на каком разделе и по какому пути у вал лежат vmlinuz, initrd и grub.cfg.
    Если вы правильно отредактировали /etc/fstab то у вас произойдет полная загрузка системы.
    Теперь дело за малым:
    update-grub
    grub заново сгенерирует grub.cfg с новыми UUID.
    Все, можно проще отремонтировать если подсоединить ваш SSD к рабочей Linux машине.
    Допустим, этот диск оказался вторым и встал как /dev/sdb.
    Монтируете по очереди разделы этого диска пока не найдете root.
    Допустим, вы нашли таки root на /dev/sdb3
    mount /dev/sdb3 /mnt
    # теперь в зависимости от разбивки нужно смонтировать boot (если он отдельном разделе) и efi
    mount /dev/sdb2 /mnt/boot
    mount /dev/sda1 /mnt/boot/efi
    # Монтируем виртуальные fs
    mount --bind /dev /mnt/dev
    mount -t proc none /mnt/proc
    mount -t sysfs none /mnt/sys
    mount -t devpts none /mnt/dev/pts
    mount -t efivarfs none /mnt/sys/firmware/efi/efivars
    #Ух, наконец-то!
    chroot /mnt
    # Вы в своей системе на SSD.
    update-grub