• Почему bat выводит в wmic неправильный месяц?

    @res2001
    Developer, ex-admin
    Потому что присвоилось значение из последней отфильтрованной findstrом записи: WeekInMonth=2
    Вы можете в вызове wmic отфильтровать столбцы, которые он будет возвращать:
    wmic path win32_utctime get Month /format:list

    На счет часов - тут все просто вы вызываете win32_utctime - она возвращает время в UTC, как это ни странно. Очевидно, в винде выставлен московский часовой пояс - +3 к UTC.
    Используйте win32_localtime вместо win32_utctime.
    Ответ написан
    1 комментарий
  • Что означает такая сигнатура функции?

    @res2001
    Developer, ex-admin
    Это скорее всего макросы, определенные где-то в заголовочных файлах. Поищите поиском по "#define _CMDINP" по исходникам библиотеки.

    Скорее всего _CMDIMP для компилятора микрософт преобразовывается в __declspec( dllimport ). Для gcc макрос не определен.
    _CMDAPI это видимо что-то вроде stdcall или cdecl, т.е. соглашения о вызовах.
    Ответ написан
    Комментировать
  • Семейство гигабитных Ethernet контроллеров PCI. Есть ли книги на эту тему?

    @res2001
    Developer, ex-admin
    Автосогласование реализовано на уровне PHY. Программно вполне оно управляемо. Во многих драйверах реализовано. Программно управляется PHY через MDIO. Возьмите для примера какой-либо чип Ethernet PHY, найдите даташит по нему, там будут описаны регистры и т.п. По этой информации можно уже примерно составить представление как это работает.
    Так же про автосогласование есть статья на википедии, можно начать оттуда, там есть несколько дополнительных ссылок.
    Вряд ли подобные вещи вы найдете в книгах. Возможно в англоязычной литературе что-то есть.

    Что такое SDM?
    Ответ написан
  • RAW-сокеты и API сетевых устройств в Linux. Какая есть литература?

    @res2001
    Developer, ex-admin
    По Линукс + сети книг достаточно.

    Хороших книг явно не достаточно, по моему.
    Про raw socket написано в "Unix. Разработка сетевых приложений" Стивенса. Книга старая, новых изданий нет. Но информация достаточно актуальна.

    Про API сетевых устройств - что вы имеете ввиду? Написание сетевых драйверов? Уровень железа описан в документации производителя чипа, то что касается взаимодействия с ядром - берите пример любого драйвера и переделывайте под свою железку. В новом драйвере изменений со стороны взаимодействия с ОС будет минимум, скорее всего.
    Ответ написан
  • Кросс-платформенное решение для вывода кириллицы. Как реализовать?

    @res2001
    Developer, ex-admin
    Для винды придется делать отдельную реализацию, т.к.
    1. В консоли винды несколько русских кодировок (cp1251 и cp866, причем по умолчанию cp866).
    2. В консоли винды кодировку можно менять командой chcp из самой консоли на лету.
    Так что нормальная реализация должна узнать текущую кодировку и перекодировать весь выводимый текст в нее. Аналогично и с консольным вводом.
    Менять кодировку из программы - плохой вариант, хотя и вполне работающий.
    Ответ написан
    Комментировать
  • Как организовать файлопомойку через ssh?

    @res2001
    Developer, ex-admin
    Если пользователи сидят в одной локальной сети то ssh избыточна, используйте стандартные средства: виндовые шары/samba.
    Если нужен доступ из инета, то можно использовать sshfs. Или WebDAV какой-нибудь.
    Ответ написан
    Комментировать
  • Как поделить на о в С++?

    @res2001
    Developer, ex-admin
    Если вы делите целые числа (short, int, long), то на компьютере вы в принципе не можете получить число с плавающей точкой в результате, т.к. выполняете целочисленное деление.
    Кроме того в процессоре целочисленное деление на ноль обычно вызывает аппаратное исключение. Оно может передаваться в приложение, может не передаваться, тут уже особенности платформы, runtime и т.п. Можете поэкспериментировать.

    Деление на ноль чисел с плавающей точкой стандартно дает в результате NaN - это не число (Not a Number). Любые дальнейшие операции с NaN будут давать в результате NaN.
    Современная стандартная библиотека позволяет настроить поведение так, что бы при делении на ноль чисел с плавающей точкой так же выбрасывалось исключение (std::fesetexceptflag()).

    Если вы хотите получить какое-то число близкое к нулю - реализуйте деление так как считаете нужным.
    Ответ написан
    Комментировать
  • Что такое Статический и Динамический массив?

    @res2001
    Developer, ex-admin
    Память под статический массив выделяется на стеке. При выходе из области видимости стек очищается и память под массивом освобождается автоматически (не нужна операция освобождения памяти, операция есть, но о ней позаботится компилятор самостоятельно).

    Память для динамического массива выделяется в динамической памяти (в куче) (new[]). Когда массив становится не нужным память должна быть освобождена (delete[]), иначе произойдет утечка памяти.

    В связи с вышеизложенными принципиальными отличиями, есть несколько следствий:
    1. Имя статического массива это не указатель. Это можно понять например сравнив, что возвращает sizeoff() для статического массива и для динамического. Хотя в некоторых ситуациях компилятор ведет себя так, как будто имя статического массива это указатель, например: можно передать имя статического массива в функцию, принимающую указатель.
    2. У динамического массива нет имени. Операция new[] возвращает указатель. Имя есть у указателя.
    3. Внимание! Оба варианта массивов имеют фиксированный размер. Изменять его нельзя!
    То что в std::vector вы можете укладывать кучу элементов постепенно, не указывая нигде предварительного размера является следствием того, что std::vector скрывает от вас всю работу, которую он при этом делает. При добавлении нового элемента, для которого нет места, он выделяет память для нового массива большего размера, копирует старый массив в новый, удаляет старый массив, добавляет новый элемент. Если идет интенсивная работа с push_back(), то это может ОООЧЕНЬ дорого стоить. std::vector - это удобно, но необходимо всегда помнить, за счет чего достигается это удобство. std::vector - это не динамический массив - это обертка над ним для более удобной работы с динамическим массивом.

    В языке Си (C99) есть такая штука как Variable Length Array (VLA) - это статический массив с изменяемым размером. Т.е. вы можете, например, в функции объявить int arr[N], где N будет передаваться в функцию как параметр.
    В стандарте С++ VLA нет! Но, например, тот же gcc с опциями по умолчанию разрешает его использования в С++ проектах. С опциями, заставляющими gcc более жестко следовать стандарту, он может запрещать использовать VLA в С++ проектах. Но не рассчитывайте, что все компиляторы будут так делать. Например микрософтовский компилятор в принципе не умеет в VLA (хотя я уже пару лет не проверял это).
    VLA может показаться классной штукой.
    Но, например, в ядре Линукс в свое время проводили целую компанию по выпиливанию VLA из исходников. Торвальдс высказывался негативно про VLA. Все это при желании можно нагуглить.
    Стоит помнить, что размер стека ограничен, а VLA то же выделяется на стеке. Кроме того выделение памяти для обычного статического массива это просто увеличение счетчика стека на константу (и все, одна операция сложения регистра с константой, а компилятор одной операцией выделяет память для всех переменных в текущей области видимости). С VLA все сложнее с выделением и удалением. Так же sizeof() для обычного статического массива это операция времени компиляции (при выполнении будет уже заранее известная константа), для VLA - это полноценный вызов функции.
    Ответ написан
    1 комментарий
  • Заинклудить из Windows.h только Sleep()?

    @res2001
    Developer, ex-admin
    MSDN говорит, что объявление Sleep() находится в файле synchapi.h. Так что можете подключать этот файл, а не глобальный Windows.h.
    Так же можно просто выдернуть объявление этой функции из synchapi.h и вставить его в свой код:
    void Sleep(DWORD dwMilliseconds);
    После этого можно использовать функцию. Главное не забудьте подключить виндовые библиотеки при сборке. Эта функция находится в Kernel32.lib.
    Ответ написан
    5 комментариев
  • Как массово переименовать файлы формата PDF с нумерацией?

    @res2001
    Developer, ex-admin
    Сложность в том, что нужно выделить из имени файла его номер и добавить нужное количество нулей.
    Выделить номер можно загнав имя файла в цикл for /f и разделив его на токены. Из токенов нас интересует только 1 токен (номер):
    for %%a in (*) do if /i "%%~xa"==".pdf" for /f "tokens=1,* delims=." %%b in (%%a) do (
      echo %%b
    )

    Во внутреннем цикле в переменной %%b будет номер файла.
    Для того чтобы добавить нужное количество нулей, нужно знать длину номера.
    Функцию определения длины строки возьмите на сером форуме.
    Сам ею не однократно пользовался.
    Ну а дальше просто добавьте впереди 3 нуля к имени файла, а потом обрежте лишние. Команда set умеет выделять подстроки.
    Для справки:
    for /?
    set /?
    Ответ написан
    1 комментарий
  • Как на VPN сделать чтобы при переключении провайдера - сохранялся коннект и ip?

    @res2001
    Developer, ex-admin
    Может проще сменить провайдера?
    При использовании ВПН упадет скорость передачи, т.к. трафик начнет шифроваться и добавится дополнительный обходной маршрут через ВПН сервер.

    Реализовать ВПН достаточно просто. Проще всего купить уже готовый, сейчас это не сложно. Надо подобрать оператора ВПН, предоставляющего тип ВПН, который поддерживает ваш роутер.
    Но надежней на мой взгляд поднять ВПН самому, это то же не сильно сложно. Для этого вам надо арендовать VPS с Linux, настроить там подходящий ВПН сервер. На роутере настраиваете ВПН клиент. В правилах маршрутизации роутера надо добавить маршрут до адресов брокера через ВПН сервер. Не делайте ВПН маршрутом по умолчанию, т.к. весь трафик пойдет через ВПН. Роутер должен подключать ВПН как по основному так и по резервному каналам.
    При этом на компе и в QUIK не надо ничего делать - все будет для них прозрачно.
    Выбирайте оператора VPS имеющего сервера в регионе нахождения брокера, так вы сможете несколько уменьшить задержки из-за ВПН. Где находится брокер можно узнать по geoip (он может врать) или спросить у брокера.

    При смене канала связи роутером ВПН, естественно то же разорвется. Но QUIK об это не узнает, просто будет задержка в передаче пока не поднимется ВПН по резервному каналу. Конечно, если задержка будет приличной, то в итоге QUIK то же разорвет соединение. Насколько большой должна быть задержка, чтобы QUIK разорвал соединение, можно выяснить тестами. Возможно в QUIKе есть какие-то настройки регулирующие таймауты разрыва.
    Ответ написан
    Комментировать
  • Linux IDE eclipse c++. Как открыть и скомпилировать данный пример?

    @res2001
    Developer, ex-admin
    File->New->C++ Project->Hello World C++ project->дайте название проекту в поле Project name->Finish
    В Project Explorer появится созданный проект с одним файлом исходного кода. Откройте этот файл, там будет обычный "Hello world". Замените все содержимое файла, на код из документа.
    Собрать проект: Project->Build All
    Запустить собранный проект Ctrl+F11 (Run->Run)
    Ответ написан
    Комментировать
  • Как копировать один символ строки в другую переменную?

    @res2001
    Developer, ex-admin
    Для кода нет никакой разницы английский символ в строке, русский или китайский.
    Но когда вы читаете текстовый файл глазами, чтобы символы правильно отображались вы должны выбрать правильную кодировку. Си никак не меняет кодировку символов, то что есть в строке то и пишется в файл.

    Вообще у вас как-то усложнена запись в файл. Зачем вы копируете этот единственный символ, да еще и выделяете для этих 2ух байт динамическую память (которую надо еще и освободить после использования).
    Си строка - это просто массив байт. С ним можно обращаться как с массивом (symb[i]). Для записи в файл одного символа используйте fputc(), для записи нескольких байт используйте fwrite().
    Ответ написан
    Комментировать
  • С чего начять новичку в СИ?

    @res2001
    Developer, ex-admin
    1.Си достаточно не большой и простой язык программирования. Возьмите любой учебник для начинающих. Изучите язык, порешайте задачи оттуда.
    Поймите все про Си строки. Все достаточно просто, но почему то у многих с этим проблемы в начале.
    Поймите тонкие моменты языка (это важно для системного программиста и для "железячника", да и просто для хорошего программиста): указатели, арифметика указателей, динамическое выделение памяти.

    2. Потом надо погрузиться в программирование для той ОС, которую планируете использовать. Обычно это линукс. Учитывая ваши интересы (системное программирование, железо), то тут можно порекомендовать следующие книги:
    - https://www.ozon.ru/product/linux-api-ischerpyvayu... - это для user space. Эта книга больше справочник по Linux API. Если у вас хорошо с английским то эту книгу может заменить встроенная справка линукс (man).
    - https://www.ozon.ru/product/yadro-linux-opisanie-p... - это kernel space (драйвера)

    3. Параллельно с первыми двумя пунктами есть смысл читать что-нибудь по алгоритмам. Например Кормена: https://www.ozon.ru/product/algoritmy-postroenie-i...

    4. После того как будете уверены в своих знаниях Си и Linux, можете выбирать платформу с которой вы хотите работать (железку) и начинать реализовывать свои задачи. По ходу дела возникнет куча вопросов. Большая часть из них может быть решена с помощью чтения TRM (Technical Reference Manual, предоставляется производителем железа/процессора). TRMы обычно оочень большие просто так их читать без конкретной цели смысла нет.
    Ответ написан
    1 комментарий
  • Как модифицировать обновляемый клон чужого проекта?

    @res2001
    Developer, ex-admin
    Клонируйте оригинальный репозиторий. В клоне заведите собственную ветку, в нее вносите свои изменения.
    Когда авторы обновят свой репо обновляйте master клона из оригинального репозитория, затем делайте rebase своей ветки на новый мастер с разрешением конфликтов.
    Ответ написан
    5 комментариев
  • Почему при компиляции проекта console application в dev c++ большой вес файла?

    @res2001
    Developer, ex-admin
    Используйте динамическую (а не статическую) линковку со стандартной библиотекой, возможно это уменьшит размер исполняемого файла. Но в этом случае клиенту придется тащить дополнительные библиотеки в виде отдельных файлов *.dll или в случае MSVC устанавливать runtime правильной версии.
    Ответ написан
    Комментировать
  • Почему после закрытия windows remote descktop, отключаются все процессы?

    @res2001
    Developer, ex-admin
    В настройках пользователя есть возможность настроить реакцию на отключение сеанса (закрытие окна mstcs "крестом" (без выхода) - это и есть отключение сеанса). Видимо реакция у вашего пользователя - завершение сеанса через какое-то время. Можно настроить так что бы отключенный сеанс никогда не завершался, тогда при повторном входе вы попадете в уже работающий сеанс со всеми запущенными программами.
    https://winitpro.ru/index.php/2020/05/25/rdp-sessi...
    Ответ написан
    Комментировать
  • Как сделать такую сортировку?

    @res2001
    Developer, ex-admin
    order by order_num, order_name
    Правда в этом случае все услуги будут сортироваться вторично по oreder_name, а не только те у которых нет order_num.
    Если делать точно так как вы хотите, нужно отдельно отбирать услуги с order_num != null и сортировать их только по order_num, и отдельно отбирать услуги с order_num == null и сортировать по order_name, затем оба списка объединять через union.
    Ответ написан
    Комментировать
  • Почему некорректно находит произведение чисел?

    @res2001
    Developer, ex-admin
    Почему вы в функции с переменным количеством аргументов не используете стандартный механизм для работы с аргументами в подобных функциях (#include <cstdarg>)?

    Поставьте отладочный вывод в цикл, где выведите значение count, а заодно и *ptr и comp. То же самое можно быстро посмотреть в отладчике затратив минуты 3 на все. Выводите значение floatов с большим количество знаков после запятой (10-15).
    Вы будете удивлены тому, что во float 3.0 это не обязательно равно 3, ну и т.д. То же самое относится к любым типам с плавающей точкой.
    Передавайте первым аргументом uint32_t, вторым и следующим float. Тогда все будет нормально. Код, конечно, придется немного переделать.
    Ответ написан
    3 комментария
  • Хорошие учебники и справочники по математике?

    @res2001
    Developer, ex-admin
    Школьные учебники достаточно не плохи если их читать и пытаться вникнуть.
    Ответ написан
    Комментировать