• Как запустить фоновый процесс из popen под win64?

    @res2001
    redcircle,
    И несмотря на вроде как параллельный запуск второго cmd.exe через start, первый cmd.exe почему-то не завершается, пока не завершится второй cmd.exe вызыванный через start. Уже проверял это не один десяток раз.

    Тогда попутные вопросы по приведенному примеру с
    cmd /c '(start "" cmd.exe /k) && timeout /t 30'
    После запуска второго окна cmd команда timeout стартует сразу? Что происходит после того как timeout закончится? Остается висеть первое окно cmd?
    Если добавить еще команду exit после timeout будет так же?

    Вы писали, что функция process() выполняет команду в cmd.exe, т.е. судя по всему она сама запускает cmd.
    Передав в process() вышеприведенную строку в итоге, видимо получилось что-то вроде:
    cmd /c cmd /c '(start "" cmd.exe /k) && timeout /t 30'

    Так что, возможно, одна cmd /c лишняя.

    В менеджере задач винды на вкладке Детально, можно добавить дополнительный столбец с командной строкой запуска и там можно увидеть какая конструкция в итоге получается на выходе из process().
    Написано
  • Как запустить фоновый процесс из popen под win64?

    @res2001
    redcircle,
    При этом мне только одну программу надо запускать, а не 2.

    Одну вы запускаете изначально для чего вызываете функцию process(). Вторую вы хотите запустить параллельно первой.
    Если вторую надо запустить после возврата из первой, тогда все упрощается:
    program1.exe
    start "" program2.exe


    С Windows такое почему-то не работает, cmd.exe всё равно дожидается выполения фоновых процессов почему-то

    В винде, если запускать программу через start, то ожидания завершения процесса не происходит.
    Для примера, запустите в консоли это:
    (start "" cmd.exe /k) && timeout /t 30
    Написано
  • Как запустить фоновый процесс из popen под win64?

    @res2001
    redcircle,
    Нужно как раз не ждать завершения.

    На сколько я понимаю, функция process запускает процесс и завершается после завершения процесса, т.к. в конце дескриптор канала закрывается. Поэтому после завершения функции можно считать, что и запущенного процесса уже нет.
    Думаю можно сделать примерно так: в process запускать батник примерно следующего содержания (схематично):
    :: process1.bat
    start "" cmd.exe /c process2.bat
    program1.exe

    Батник сначала запускает второй батник (process2.bat), причем второй батник должен запуститься в другом процессе cmd.exe и в другом консольном окне и не нужно ждать завершения второго батника, поэтому второй батник запускаем через start.
    После запуска второго батника стартуем тот процесс, который нужно стартовать изначально (programm1.exe)
    :: process2.bat
    timeout /t 2
    program2.exe

    Второй батник process2.bat сначала просто ждет заданное время (у меня 2 секунды), это нужно, чтобы первый батник успел запустить приложение program1.exe. Затем стартует ваше второе приложение, которое вам надо запустить после первого. Правда есть шанс, что пока стартанет второе приложение, первое уже закроется :)
    Написано
  • Почему архиватор работает только с текстовыми файлами?

    @res2001
    Anton F, Да я в курсе. Просто string чисто семантически говорит о том, что внутри строка и так и подмывает работать с ним как со строкой и нужно постоянно себя держать в рамках, когда знаешь, что внутри не строка. Лучше этот мазохизм прекратить с самого начала.
    Написано
  • Как настроить или создать интернет прокси или шлюз на домашнем пк что бы с его ip заходить удаленно?

    @res2001
    clenar, ВПС в предложенном варианте будет выступать как ВПН сервер, к которому будет подключаться домашний комп (роутер) и удаленный. Дальше настроив правильно маршрутизацию можно добиться, чтоб с удаленного компа через ВПН сервер вы попадали на домашний комп, а дальше выходили туда куда вам надо.
    Т.е. будет выполняться ваше условие.
    Хотя проще и короче, конечно, выходить через ВПН сервер.
    Написано
  • Как настроить или создать интернет прокси или шлюз на домашнем пк что бы с его ip заходить удаленно?

    @res2001
    Либо арендовать VPS у которого будет белый статический IP, развернуть на нем ВПН сервер, к которому подключаться из дома и с удаленного места и через эту цепочку выходить куда надо.
    В этом случае домашний адрес можно не менять.
    Но этот вариант будет наверняка дороже, чем арендовать белый адрес у провайдера. Но зато реализовать его можно за несколько часов (при наличии некоторого опыта), а провайдер может выдать статический адрес только на следующий месяц после добавления этой услуги в договор, хотя это зависит от вашего конкретного провайдера.

    Можно начать с VPS и параллельно получать адрес у прова. Когда адрес получите, то от VPSа можно отказаться и перейти на любой из предложенных в ответе вариантов.
    Если делать параллельно оба варианта, то обычно операторы VPS предлагают тестировать бесплатно некоторую минимальную конфигурацию VPS в течение некоторого времени (неделя/месяц, у кого как). Для разворачивания ВПН "минималки" вполне будет достаточно. Так что может и не понадобится тратится на временный VPS.
    Написано
  • Ipfire. Как реализован протокол strongswan?

    @res2001
    brbwk,
    ну должен же быть процесс, который держит сокет для прослушивания

    Не факт. Например если трафик по ВПН приходит транзитный, то он из ядра не выходит - сразу перенаправляется на другой интерфейс с помощью таблицы маршрутизации и/или фаервола.
    Если трафик предназначен для этого же хоста, тогда такой процесс есть. Только это не charon или strongswan, а например апач или любое другое приложение - зависит от трафика.
    Если что, ответ на пинг то же генерируется ядром самостоятельно.
    Написано
  • Ipfire. Как реализован протокол strongswan?

    @res2001
    На сколько я знаю, ipsec реализован как часть TCP/IP в ядре. User space демоны нужны лишь для инициализации и управления ключами. Остальной ВПН трафик расшифровывается в ядре и дальше уже расшифрованный трафик попадает непосредственно адресату (клиентскому приложению).
    Поэтому вы в хуках и не видите собственно трафика, а только пакеты isakmp.
    Написано
  • Как реализовать Оператор OR в команде FOR?

    @res2001
    Djasar, да хоть 100 файлов - цикл один, главное, чтоб файлы попадали под маску
    Написано
  • Почему архиватор работает только с текстовыми файлами?

    @res2001
    Jden10, Хотите работать с бинарными файлами, не используйте нигде std::string. Вектор байтов ваше все.
    И может быть даже и вектор не нужен, а можно обойтись массивом фиксированного размера (std::array) - будет работать быстрее.
    Написано
  • Как сконфигурировать монтирование дисков в linux, чтобы при клонировании на другой hdd система запустилась?

    @res2001
    vl-roma,
    Есть подозрение что не может смонтироваться так ориентируется на UIDD

    Что это значит? Для снятия подозрений надо просто открыть fstab и посмотреть глазами.
    Если в fstab исходного диска разделы монтируются по UUID руками поправьте его на монтирование по именам.
    Написано
  • Как в *.cmd после findstr произвести математические вычисления?

    @res2001
    Роман,
    Результат:
    "RAM= GB"

    Из того что вижу в вашем коде у первого findstr не задано выражение поиска. findstr нужна чтоб что-то искать в тексте. Что она будет искать у вас не задано. Скорее всего findstr завершается с ошибкой.
    Просто запустите эти команды в консоле вне батника и посмотрите что будет в результате.

    Арифметика в батниках возможно только с помощью set /a
    Для справки:
    findstr /?
    set /?
    for /?
    setlocal /?
    Написано
  • Как создают интерфейсы в программах?

    @res2001
    В самом Си никаких окон нет, как нет их и в С++ и во многих других ЯПах. Но это и не задача ЯП.
    Рисование окошек и элементов управления принципиально ничем особенным не отличается от любых других системных функций, предоставляемых ОС.

    Функционал GUI предоставляет ОС (в случае никсов не ОС, а X11, но это не принципиально). В приложении на любом ЯП вы просто можете использовать базовый функционал ОС. ОС (и Х11) свой функционал предоставляют в виде набора стандартных библиотек, которые вы подключаете к своему приложению на Си (или любом другом ЯП).
    Но обычно, использовать базовый функционал сложно (или мало плюшек или плюшки еще сложнее использовать или много кода или хочется ООП и т.п.), поэтому вокруг базового функционала написано куча дополнительных библиотек, которые упрощают использование GUI и возможно дают что-то сверху.
    Во многих современных библиотеках реализуют кросс-платформенный вариант GUI, основываясь на базовом функционале для каждой конкретной платформы. Например Qt, wxWidgets и т.д. и т.п.
    Сейчас на Си писать GUI не слишком популярно, но, конечно, никто не запрещает это делать. Если очень надо, то лучше использовать С++ или C#.
    Написано
  • Есть ли способ быстро выравнивать адреса?

    @res2001
    jcmvbkbc,
    увеличивает адрес, даже если он уже был выровнен

    И точно. Даже 1 раз попадал, похоже, на эту ошибку, что приводило к выходу за гранцы буфера. Каким-то костылем тогда вышел из положения, но причину не понял. Спасибо!
    Написано
  • Есть ли способ быстро выравнивать адреса?

    @res2001
    Герман,
    позволю себе спросить ещё вот что: можно ли выравнять адрес до ближайшей к нему степени двойки (в большую сторону)? 1000 -> 1024, 3000 ->4096 и т.д.

    Есть быстрый алгоритм нахождения ближайшей большей степени двойки для числа. В данном случае адрес можно рассматривать как целое число.
    Найти его можно тут: https://github.com/gibsjose/BitHacks/blob/master/B... среди других подобных алгоритмов. Там правда он рассчитан на 32битное целое, но по аналогии его можно привести к 64битному.

    Для выравнивания адреса я использую обычно этот вариант:
    addr = (addr | (alignment - 1)) + 1;
    Где alignment - степень двойки.
    Написано
  • Округление при подсчёте в С++?

    @res2001
    Miroslav Bodrich, У тебя сейчас x на 21 шаге больше, чем endX из-за специфики чисел с плавающей точкой. Поэтому цикл завершается раньше времени.
    Измени условие выхода из цикла, посчитай целое количество шагов и цикл поменяй на for с заданным количеством шагов.

    И если считать x как предложил jcmvbkbc, то погрешность результата будет меньше, чем если использовать сложение (как сейчас).
    Написано
  • Округление при подсчёте в С++?

    @res2001
    Что выводит то? Покажи 21 шаг. Кстати, вполне можно текстом подобные вещи выкладывать, картинки тут не приветствуются, да и не удобно с ними.
    И вообще не нашел, чтоб в коде было какое-то округление.
    Написано
  • Как написать типизированную обёртку над простым тред-пулом?

    @res2001
    Если чем-то не устраивают стандартные фьючи и прочая обвязка, то можно посмотреть как они реализованы.
    https://en.cppreference.com/w/cpp/thread
    Написано
  • Как убрать ошибку NMAKE: fatal error U1077 при изменении кода в среде Clion?

    @res2001
    MikhailZarevich, Когда запускаете любую программу, то не нужно ее файл открывать для записи - достаточно только чтения.
    cl.exe - программа, clion должен ее запустить с параметрами, что она собрала вам новый исполняемый файл из ваших исходников, который бы он мог запустить.
    Почему у вас cl.exe пытается открыться для записи не ясно. Это какой-то нонсенс.

    Попробуйте собрать код из командной строки, запустив командную строку от MSVS (ярлык для ее запуска ставится вместе с MSVS и находится в папке студии в меню Пуск). Например так:
    cl <имя вашего cpp файла>
    Если это пройдет нормально, а оно должно быть так, то и из IDE то же должно быть все хорошо, т.к. IDE делает примерно то же самое.
    Написано