Задать вопрос
  • Как переместить файлы из слишком длинного пути?

    @res2001
    leaningless, Если вложенность папок действительно очень большая, то нужно не указывать полный путь, а просто переходить в следующую подпапку с помощью cd или pushd/popd. У вас какие-то проблемы с этим?
    Думаю, что готового решения вы не найдете.
    Для справки смотрите:
    for /?
    cd /?
    pushd /?
    popd /?

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

    @res2001
    maaGames,
    Хранить сырые сокеты мне в любом случае не подходит

    Вам и не нужно их хранить. Вам нужно сырой дескриптор только передать порожденному процессу, порожденный процесс получает дескриптор и на его основе создает соответствующий класс poco (я надеюсь poco продоставляет такой функционал), т.е. poco должен не открыть сокет, а присоединиться к нему (attach).
    А дальше работаете как обычно через poco.
    Если пользователь закрыл соединение, то когда он откроет его снова, порожденный процесс вместо того чтобы что-то вычислять просто прочитает сохраненные данные и передаст клиенту.
    На счет не использования СУБД - вопрос спорный что тут больше усложнит, но вам, конечно, виднее.

    PS: посмотрел доку по poco - в SocketImpl есть конструктор принимающий сырой сокет. https://pocoproject.org/docs/Poco.Net.SocketImpl.html
  • Клиент-серверное приложение?

    @res2001
    maaGames, парой IP:PORT определяется UDP сокет (и слушающий TCP сокет), а TCP сокет соединения определяется 2 парами для обеих сторон соединения. Поэтому TCP сокет установленного соединения называют полным.
    Хорошая книга по программированию сокетов: Unix. Разработка сетевых приложений У.Стивенс
    Она хоть и давно не переиздавалась (автор уже умер к сожалению), но по моему является лучшей книгой по сетевому программированию и до сих пор не утратила актуальность. В свое время покупал ее на alib.ru.

    С сырым дескриптором кроссплатформенно нельзя работать.

    Да, вам нужно эту часть кода реализовать для всех поддерживаемых ОС отдельно.
    И тут даже вопрос не в сырых дескрипторах сокетов, а в процедуре передачи дескриптора порожденному процессу - это не кроссплатформенная операция.
    Если платформозависимые части реализовывать в разных файлах, то можно просто включать в сборку нужный файл. Либо можно реализовывать в одном файле, тогда внутри файла блоки кода разделять соответствующими #if #endif для нужных платформ:
    https://sourceforge.net/p/predef/wiki/OperatingSystems/
    https://sourceforge.net/p/predef/wiki/Compilers/
    https://sourceforge.net/p/predef/wiki/Architectures/
    https://sourceforge.net/p/predef/wiki/Libraries/

    Часто в кроссплатформенных проектах есть платформ-специфичные части. Кроссплатформенные библиотеки просто позволяют свести эти части к минимуму.
  • Клиент-серверное приложение?

    @res2001
    maaGames, Для винды можете начать отсюда: www.codenet.ru/progr/inet/socket_proc.php
    Вы должны будете у poco получить "сырой" дескриптор сокета соединения, а затем его передавать.
    После того как дескриптор передан, на слушающем процессе его можно закрыть.
  • Клиент-серверное приложение?

    @res2001
    maaGames, Астра линукс - вполне годный вариант. Есть сертифицированный вариант с ядром 4 версии можно считать более-менее актуальным. Если сертификат не нужен - то доступны все новые ядра.
    В линукс передать сокет можно если новый процесс создавать с помощью fork(), тогда все открытые дескрипторы наследуются дочерним процессом. Есть аттрибут дескриптора с помощью которого можно регулировать, какие дескрипторы должны быть унаследованы порожденным процессом. Это работает с любыми дескрипторами (файлами, сокетами и т.п.)
    В винде сходу не скажу как передавать дескриптор сокета, но наверняка механизм есть.
  • Клиент-серверное приложение?

    @res2001
    maaGames, Вам нужно передавать процессу не порт клиента, а готовый сокет.
    Под какую ОС пишете?
  • Клиент-серверное приложение?

    @res2001
    maaGames,
    Вот с полноценным сокетом у меня проблема, что его же надо в роутере пробрасывать

    Не надо. У сокета соединения порт тот же самый, что и у слушающего сокета.
  • Клиент-серверное приложение?

    @res2001
    maaGames, Проще всего сразу после установки соединения стартовать вычислительный процесс и ему передавать новый клиентский сокет. А серверный процесс продолжает дальше принимать соединения.
  • Как удалить из текстового файла структуру?

    @res2001
    Если структура бинарная можно вычислить смещения начала структуры и писать туда данные, считанные после структуры. В конце надо будет сделать уменьшение размера файла на размер удаляемой структуры.
  • В IDE qt creater выходят ошибки при запуске кода, хотя в DEV-C++ код нормально компилируется. Как исправить?

    @res2001
    Если ваш проект состоит из 1 файла исходного кода, то проще собрать его в командной строке.
    Но конечно, для более сложных проектов, придется познакомится как минимум с одной системой сборки типа qmake или cmake (их еще целая пачка есть, наиболее известная это make и ее makefile)
  • В IDE qt creater выходят ошибки при запуске кода, хотя в DEV-C++ код нормально компилируется. Как исправить?

    @res2001
    Добавлю.
    qtcreator прекрасно работает и с cmake проектами. Т.к. у вас код не использует Qt то можно использовать cmake для сборки.
  • OpenVPN не работает по TCP?

    @res2001
    Temp-User_0000,
    Видимо WSL - это виндовая пародия на openvz.

    Нет.
    А аутентификация по LDAP или pam MySQL на виндовс работает?!

    А что может помешать? Это чисто программные userspace решения.
  • OpenVPN не работает по TCP?

    @res2001
    Temp-User_0000,
    Options error: --explicit-exit-notify can only be used with --proto udp

    Как написано в логе этот параметр не совместим с TCP и используется только для UDP.
    На счет WSL: у меня не было опыта запуска openvpn под wsl. Из того, что удалось нагуглить - WSL не поддерживает интерфейсы tun/tap для виртуальных сетевых адаптеров, которые использует openvpn. Поэтому, похоже, под wsl это не будет работать.
    Но openvpn прекрасно работает под виндой без wsl, как клиент так и сервер.
  • Что не так в #define?

    @res2001
    Илья, Прекрасно ссылки вставляются.
  • Что не так в #define?

    @res2001
    Илья, Уберите запуск программы из строки компиляции, возможно при компиляции происходит ошибка и исполняется старый исполняемый файл. Из-за того, что вы стразу стартуете программу, то ошибку компиляции просто не видите.
    Как вариант удалите исполняемый файл руками, потом компилируйте.
  • Можно ли это считать авторизацией по RDP?

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

    @res2001
    Что-то я замудрил. На самом деле всю команду не нужно заключать в кавычки.

    В общем мне удалось заставить работать эту конструкцию после выполнения п.1
    Рабочий код:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    
    int main(int argc, char **argv)
    {
            char filenames[1000];
            memset(filenames, 0, 1000);
            printf("Enter filenames:\n");
            read(0, filenames, 1000);
            filenames[strlen(filenames) - 1] = 0;
            const char part1[] = "file ";
            const char part2[] = " | grep 'C source' | wc -l";
            char* result = malloc(strlen(part1) + strlen(filenames) + strlen(part2) + 1);
            memset(result, 0, strlen(part1) + strlen(filenames) + strlen(part2) + 1);
            strcpy(result, part1);
            printf("len filenames = %d\n", strlen(filenames));
            strcat(result, filenames);
            strcat(result, part2);
            printf("Command line: %s\n", result);
            fflush(stdout);
            system(result);
    }
  • Как мне правильно соединить три строки и сделать системный вызов?

    @res2001
    Ирина, Поизучал немного вопрос.
    1.Функция read возвращает введеную строку вместе с символом перевода строки (вы ведь нажимаете Enter когда вводите файл, этот Enter попадает в filenames то же). Нужно вручную устанавливать в 0 последний символ в filenames после ввода.
    2.Функция system() выполняет /bin/sh -c <command>.
    Что бы в этой конструкции ваш конвеер отработал правильно все команды нужно заключить в кавычки (двойные или одинарные). Строку 'C source' лучше привести к виду \"C source\" экранировав внутренние двойные кавычки
    3.Даже все поправив мне не удалось заставить system выполнить конвеер. Одиночную команду он выполняет, конвеер не хочет. По уму нужно посмотреть как реализован system в glibc, но на это сейчас нет времени.
    Немного погуглив нашел, что народ реализует подобную схему не используя system, а организуя конвеер с помощью fork и execlp. Пример реализации можно посмотреть тут
  • Что делать, если Windows 10 работает ТОЛЬКО в безопасном режиме?

    @res2001
    Pavel_Qantorium, может
    Смотрите виндовые журналы, там может быть зацепка.
  • Как создать правильный бат-файл для архивации с условиями?

    @res2001
    У меня почему то не полностью отображается код первого батника.
    Для пропуска нескольких первых строк в for /f можно использовать опцию skip и не вести счетчик. Смотрите for /?
    Во втором батнике вам нужна только первая строка в выводе dir отсортированном от большей даты к меньшей, поэтому после set можно сразу сделать goto за цикл (или запуск winrar проводить внутри цикла и на первой же итерации завершать выполнение батника). В целом во втором батнике нет комакнды вывода, так что не понятна ваша фраза
    только выводит как "текст" название последнего созданного каталога с архивом.

    Не отрабатывает start, что ли?