• Как посоветуете парсить tcpdump?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    есть ли готовый инструмент, чтобы искать и вылавливать всякие срачи

    в iptraf есть режим LAN station monitor, там показывается сколько пакетов/байтов откуда приходит/уходит и можно отсортировать:
    5dcb1faeedada560597943.png

    Им ARP'ы нужны? Я почему сомневаюсь - вроде как им ARP-запросы нужны, чтоб найти PPPoE концентратор.

    RFC на протокол читал? Что понял?
    Подсказка: ARP связывает MAC с IP. А PPPoE -- ни разу не IP.
    Ответ написан
    Комментировать
  • Как выбрать нужно количество строк из файла?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    tac file | sed -n '1,/^$/{/./p}' | tac
    Первый tac читает файл задом наперёд, sed вырезает первый блок непустых строк, второй tac переворачивает этот блок в исходное состояние.
    Ответ написан
    7 комментариев
  • Как передать двумерный статический массив в функцию на Си?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть массив char mass[1024][1024] и функция int fun(char*)

    в такую функцию можно передать fun(&mass[0][0]).

    Есть ли возможность для указания статического массива как аргумента?

    В смысле массива статической размерности? Легко: int fun(char a[][1000]); ... fun(mass);
    Ответ написан
  • Как запустить приложение через forkpty?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    может быть так?

    #include <pty.h>
    #include <unistd.h>
    #include <thread>
    #include <future>
    #include <iostream>
    #include <string>
    
    ssize_t sz = 1;
    
    int main()
    {
      int mfd;
    
      pid_t pid_fork = forkpty(&mfd, NULL, NULL, NULL);
    
      if (!pid_fork) {
        // Дочерний процесс
        execl("/bin/sh", "-", NULL);
      } else {
        // Родительский процесс
        char buf[1024];
    
        // Async
        auto future = std::async(std::launch::async, [mfd]() {
          std::string line;
          while (sz) {
            std::getline(std::cin, line);
            line = line  + "\n";
            write(mfd, line.c_str(), line.size()); // Нужно направить в дочерний процесс как stdin
            std::this_thread::sleep_for(std::chrono::milliseconds(100));
          }
        });
    
        while (sz = read(mfd, buf, sizeof(buf))) {
          write(STDOUT_FILENO, buf, sz); // Вывод из дочернего процесса stdout
          std::this_thread::sleep_for(std::chrono::milliseconds(100));
        }
    
        exit(0);
      }
    }

    Поскольку это теперь терминал, то имеет смысл установить размеры pty такими же, как у терминала вызывающей программы, например так:

    ...
    #include <sys/ioctl.h>
    ...
      struct winsize ws, *pws = NULL;
    
      if (ioctl(1, TIOCGWINSZ, &ws) >= 0)
        pws = &ws;
      pid_t pid_fork = forkpty(&mfd, NULL, NULL, pws);


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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как быть? Какой размер массива объявить?

    Не объявляй никакой. Воспользуйся вместо этого стандартным контейнером, например std::vector.
    Но если хочется помучаться -- воспользуйся указателем и выделяй память динамически, по мере поступления входных данных.
    Ответ написан
    Комментировать
  • Множественный вызов конструктора базового класса при виртуальном наследовании?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    напрашивается вопрос "Будет ли конструктор базового класса A вызываться два раза, ведь в конструкторе C тоже вызывается конструктор A?".


    Нет, не будет, потому что нет, при конструировании объекта класса D конструктор A из конструктора C не вызывается. См.:
    A mem-initializer where the mem-initializer-id denotes a virtual base class is ignored during execution of a constructor of any class that is not the most derived class.
    Ответ написан
    Комментировать
  • Как оперативно оповещать пользователей о сбоях?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как оперативно оповещать пользователей о сбоях?

    Рассылкой писем. Там тебе и группы пользователей, и решение готовое и проверенное, и все желающие смогут настроить перенаправление этих писем сразу в мусорку.
    Ответ написан
    5 комментариев
  • Как запустить команду на выбранном дисплее?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    DISPLAY=:99 -- это переменная окружения, её надо впихнуть в параметр env:
    env = os.environ
    env["DISPLAY"] = ":99"
    subprocess.run(["telegram-desktop", "-debug", "-tosettings", "-many", "-workdir", "/home/qwentor/share/prog/tgprofiles/"+phone], env=env)
    Ответ написан
    Комментировать
  • Почему данные не записываются в реестр?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    LONG error = RegCreateKeyEx(...);
      if (hKey) {

    Ошибок нет, но и результатов нет !

    Ошибок нет, потому что ты не проверяешь код ошибки, а вместо этого проверяешь hKey.
    Если внимательно прочитать https://docs.microsoft.com/en-us/windows/win32/sys... то можно увидеть для KEY_WOW64_32KEY, что
    This flag must be combined using the OR operator with the other flags in this table that either query or access registry values.

    Подозреваю, что там должно быть KEY_WOW64_32KEY | KEY_SET_VALUE.

    RegSetValueA(hKey, "test", REG_SZ, (LPCSTR)path.c_str(), sizeof(path.c_str()));

    Не sizeof. И код ошибки тоже не проверяешь.
    Ответ написан
  • Как хранятся числа в памяти?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    struct Data {
      short id;
      double val;
    };


    я понимаю что 32 00 11 49 - это интовское значение

    в этой структуре short int, 2 байта. 0x32 0x00 -- это оно (0x32 + 256 * 0x00 = 50), little endian.
    0x11 0x49 -- это мусор. 0x02 0x56 0x00 0x00 идущие дальше -- это тоже мусор.
    0x33 0x33 0x33 0x33 0x33 0x33 0xf3 0x3f -- это double (0x3ff -- порядок, 0x3333333333333 -- мантисса, значение = 0x1.3333333333333 * 2 ^ (0x3ff - 1023) = 1.19999999999999995559), little endian, ieee754.

    Как в данном выводе понять где выравнивание происходит?

    Можно воспользоваться макросом offsetof.
    Ответ написан
    5 комментариев
  • Как понять условие задачи?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я подумал, что граф всегда можно разбить на две множества так, чтобы вершины, соединенные максимальным ребром были в одном множестве, а остальные вершины в другом, то-есть ответом всегда будет максимальное ребро. Я протестировал свое решение в яндекс.контест и получил ошибку на 8 тесте. Подскажите пожалуйста, что я не правильно понял из условия?
    Может есть контрпример?

    Контрпример: квадрат, верхнее ребро -- 2, боковые -- 1, нижнее -- 0. В терминах входных данных для задачи:
    4 4
    0 1 2
    1 2 1
    2 3 0
    3 0 1

    Если разбивать твоим алгоритмом, то в одно множество попадают две верхние вершины, во второе -- две нижние. Тогда "ребро минимального веса, соединяющее вершины из одного множества" -- это ребро соединяющее две нижние вершины (2 3), его вес -- 0.
    Но если разбить граф на две левые вершины (3 0) и две правые (1 2), то "ребро минимального веса, соединяющее вершины из одного множества" имеет вес 1, что лучше, чем 0.
    Ответ написан
    Комментировать
  • Как написать алгоритм движения по спирали на Arduino?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    к сожалению, я не силен и был бы благодарен за помощь.

    Этот сайт работает немного по-другому. Сюда приходят с конкретными вопросами чтобы получить на них ответ.
    Я вижу следующие несколько первых вопросов для вашей задачи:
    1 какая спираль имеется в виду? (архимедова/логарифмическая/с прямыми углами/...?)
    2 как нужно управлять колёсами, чтобы заставить тележку двигаться по выбранной в п.1 спирали?
    3 как запрограммировать ардуино, чтобы она управляла двигателями тележки в соответствии с п.2?

    Определитесь с п.1 и 2 для начала, они не требуют знания ардуины. После этого разберитесь со своей схемой -- что там за двигатели, как они подсоединены к колёсам, как управляются. И если после этого останутся вопросы по п.3 -- приходите.
    Ответ написан
    4 комментария
  • Как изменить строку, инициализированную при объявлении массива символьных указателей, с помощью scanf?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    char * suit [4] = { "Hearts", "Diamonds", "Clubs", "Spades" };

    Как изменить строку, инициализированную при объявлении массива символьных указателей, с помощью scanf?

    В данном случае -- только выделив память для новой строки, сделав scanf туда и присвоив указатель на выделенную память элементу массива suit. Напрямую в первоначальный массив -- никак, потому что указатели указывают на константные строки (а возможность писать char * вместо const char * -- это устаревшее средство обеспечения совместимости с древними версиями стандарта).
    Ответ написан
    3 комментария
  • Разбираюсь с умножением в ассемблере, почему так работает, а так нет?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    программа ломается во время выполнения

    Как ломается-то?

    use32
    mov ax,3h
    mov bx,4h
    mul bx

    должно записать 12 в ax и 0 в dx и очистить флаги OF и CF. Что записывает?
    Ответ написан
    Комментировать
  • Может ли процессор изменять порядок инструкций в программе?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Насчет компиляторов поверю, но вот процессора ??? как ???

    Читать тут, лучше сразу английскую версию.
    Ответ написан
    Комментировать
  • Как по полному имени файла получить номер записи MFT?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как по полному имени файла получить номер записи MFT?

    Попробуй поля nFileIndexHigh и nFileIndexLow структуры BY_HANDLE_FILE_INFORMATION приходящей из GetFileInformationByHandle.
    Ответ написан
    1 комментарий
  • Си. Как добавить программу в автозагрузку?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как добавить программу на Си в автозагрузку Windows?

    Так же как и на любом другом языке -- прописав её в соответствующий ключ реестра.

    И еще: как искать информацию на ответы по Си, если я пишу в гугле "Си как добавить программу в автозагрузку", но везде появляется только С++? Нереально найти ответ.

    Потому что ты задаёшь неправильный вопрос. Язык -- это способ делать действия, а не сами действия. Добавить программу в автозагрузку можно через реестр. Писать в реестр можно через winapi. Справка по winapi есть тут.
    Ответ написан
    Комментировать
  • C++. Ассоциативность перегруженных операторов?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В сети не нашёл ответа.

    В каждом из разделов стандарта касающихся операторов написано в каком порядке группируются вызовы опреаторов в однородных выражениях (например).

    Получается, что, если явно скобками не обозначить, то ассоциативность всегда будет справа налево, или я не прав?

    Почти все операторы группируются слева направо, за исключением префиксных операторов и операторов присваивания (в том числе составных).

    Пример

    #include <string>
    #include <iostream>
    
    struct A
    {
            std::string name;
    
            A(const std::string& _name): name(_name)
            {
            }
    
            A operator +(const A& other) const
            {
                    std::cerr << name << " + " << other.name << std::endl;
                    return A(std::string("{temporary from ") + name + " + " + other.name + "}");
            }
    };
    
    int main()
    {
            A first("first"), second("second"), third("third");
            A r = first + second + third;
    }

    выводит
    first + second
    {temporary from first + second} + third
    Ответ написан
    Комментировать
  • Почему считывается не по порядку?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему результат вывода именно такой?

    Потому что если внимательно прочитать man dup, особенно вот эту часть:
    After a successful return from one of these system calls, the old
    and new file descriptors may be used interchangeably. They refer
    to the same open file description (see open(2)) and thus share file
    offset and file status flags; for example, if the file offset is modified
    by using lseek(2) on one of the descriptors, the offset is also
    changed for the other.

    то окажется, что это поведение предписанное стандартом.
    fhandle2 открыт независимо от fhandle1, поэтому у него все параметры состояния свои.
    Ответ написан
    Комментировать
  • Что мотивирует open source сообщество?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Кто эти люди что делают "готовое", что ими движет?

    Это люди которые не нашли готовое или готовое им не подошло. Они просто решают свою проблему.
    Ответ написан
    Комментировать