• Почему выбрасывает ошибку при компилировании?

    @none7
    Вы объявили функцию accept2 внутри функции main. Так делать нельзя.
    Ответ написан
    Комментировать
  • Как ежесекундно проверять данные в потоке Stream (FileStream, StreamReader, CryptoStream)?

    @none7
    Оберни inputStream или outputStream в класс реализующий Stream. Таким образом класс CryptoStream сам уведомит Ваш код о любых изменениях. Эти изменения тут же писать в прогрессбар, если конечно изменение значительно отличается от данных которые уже отображены.
    Ответ написан
    2 комментария
  • Что не так с кириллицей и пробелами?

    @none7
    Нужно понимать, что через пробелы так же передаются аргументы для программы и всё идёт одной строчкой. Поиск исполняемого файла осуществляется весьма нетривиальным способом.
    C:\Program Files (x86)\My Program\prog arg
    приводит к проверкам C:\Program.com C:\Program.exe C:\Program.vbs и так далее ещё пяток расширений. Затем тоже самое для "C:\Program Files", "C:\Program Files(x86)\My". Вроде бы не смертельно, но есть такая вещь как cmd.exe, которая ломается уже на C:\Program, если полный путь к приложению не обернуть в кавычки. И все программы, что так или иначе используют cmd.exe напарываются на эту проблему.
    Ответ написан
    Комментировать
  • Как заставить работать код C++ правильно?

    @none7
    Могу предположить, что cin >> K[i].year; не читает завершение строки(ведь они не число) и оно прилетает на ввод следующего имени. Вообще в нынешнем с++ использование указателей и неуправляемых массивов — ересь.
    #include <windows.h>
    #include <iostream>
    #include <vector>
    #include <string>
    #include <sstream>
    #include <algorithm>
    #include <ctime>
    
    using namespace std;
    
    const int UserCount = 3;
    struct Worker { // начало объявления структурного типа Worker
        string surname; //объявление поля «фамилия работника»
        string position; //объявление поля «название занимаемой должности»
        unsigned short int year; //объявление поля «год поступления на работу»
    
        static bool insensitive_compare(const Worker& a, const Worker& b)
        {
            string ta(a.surname), tb(b.surname);
            transform(ta.begin(), ta.end(), ta.begin(), [](unsigned char c) { return std::toupper(c); });
            transform(tb.begin(), tb.end(), tb.begin(), [](unsigned char c) { return std::toupper(c); });
            return ta < tb;
        }
    }; //конец объявление структуры Worker
    
    template<class T> void getline_i(istream& is, T& o)
    {
        string s;
        while (true)
        {
            getline(is, s);
            stringstream(s) >> o;
    
            if (s.length() < 1 || !isdigit(s[0]))
            {
                cout << "Ошибка. Значение должно быть числом: ";
                continue;
            }
            else
            {
                break;
            }
        }
    }
    
    int main()
    {
        system("chcp 1251");
        int n = 3; // объявление константы n — числа элементов типа «Worker»
    
        bool people = false;
    
        time_t rawtime;
        struct tm _tm;
    
        time(&rawtime);
        gmtime_s(&_tm, &rawtime);
        unsigned short int now_year = _tm.tm_year + 1900, seniority; // объявление переменных now_year — текущий год и seniority — стаж
        vector<Worker> K;
        Worker temp;
    
        for (int i = 0; i < UserCount; i++)
        {
            cout << "Фамилия и инициалы: ";
            getline(cin, temp.surname);
    
            cout << "Название занимаемой должности: ";
            getline(cin, temp.position);
    
            cout << "Год поступления на работу: ";
            getline_i(cin, temp.year);
    
            cout << "\n";
            K.push_back(temp);
        }
    
        cout << "Введите стаж работы(лет): ";
        getline_i(cin, seniority);
    
        cout << endl;
    
        for (auto current : K)
        {
            if ((now_year - current.year) > seniority)
            {
                cout << current.surname << endl;
                people = true;
            }
        }
    
        if (people == false) 
            cout << "Нет таких работников!" << endl;
    
        cout << endl;
        cout << "Список работников в алфавитном порядке" << endl;
    
        sort(K.begin(), K.end(), Worker::insensitive_compare);
    
        for (auto current : K)
            cout << current.surname << endl;
    
        system("pause");
        return 0;
    }
    Ответ написан
    Комментировать
  • Как скомпилировать этот код c++ в WebAssembly (или почему вывод wasm-файла отличается от вывода c++ программы)?

    @none7
    Действительно проблема в WasmFiddle. Он генерирует код, который нуждается в функции memcpy(импорт), но не реализует её в импорте. Добавил простенькую функцию:
    void* memcpy(char* dst, char* src, int count) {
      while(count--) *dst++ = *src++;
    }

    И чуть изменил JS-код
    var wasmModule = new WebAssembly.Module(wasmCode);
    var wasmInstance = new WebAssembly.Instance(wasmModule, wasmImports);
    var wasm_module = wasmInstance.exports
    
    wasm_module.main();
    
    for (var i=0; i < 5; i++) {
      var c1 = wasm_module.get_cache_1(i);
      var c2 = wasm_module.get_cache_2(i);
      
      log(i+" " +c1 + " " + c2);
    }

    Выводит в точности то, что Вы ожидаете.
    Ответ написан
  • Как процессор знает сколько байт занимает команда машинного кода?

    @none7
    Инструкции x86 разбросаны довольно хаотично по числовому диапазону, не говоря уже про их длину, но самому процессору намного проще декодировать инструкции, чем программам. Он просто имеет внутри дерево, если старший бит первого байта инструкции равен 0 одна ветвь, иначе другая. Так по ветвям он спускается и например доходит до инструкции 01010b (push reg) и вот он уже знает, что длина этой инструкции 5 бит + 3 бита аргументов. И может даже сразу запустить найденную инструкцию, если это какой-нибудь i286. И всё за 1 такт.
    Ответ написан
  • Асинхронный UDP-клиент на C#. Где происходит получение данных?

    @none7
    Там ниже код
    Task.Run(() =>
                {
                    IPEndPoint ipEndPoint = null;
    
                    while (true)
                    {
                        try
                        {
                            var receivedBytes = _client.Receive(ref ipEndPoint);
                            TaskCompletionSource<byte[]> tcs;
                            if (_tcsDictionary.TryGetValue(ipEndPoint, out tcs)) tcs.SetResult(receivedBytes);
                        }
                        catch (SocketException)
                        {
                            ;//при невозможности соединения продолжаем работать
                        }
    
                    }
                });

    Здесь при помощи tcs.SetResult данные передаются в первый кусок кода.
    Ответ написан
    1 комментарий
  • Не получается расширить диск в VirtualBox??

    @none7
    Это работает вроде только для динамически расширяемых дисков .vdi. С нынешним типом диска Вы можете только скопировать данные на новый диск правильного типа.
    Ответ написан
    Комментировать
  • В чём принцип работы STUN?

    @none7
    STUN нужен, чтобы узнать свой внешний ip и, что важнее внешний порт ассоциированный с внутренним. Ещё STUN сервер нужен, чтобы выяснить тип NAT. Если у одного из Вас Symmetric, а у другого RestrictedCone или PortRestrictedCone, то можно забыть про P2P. Больше STUN не на что не годен. В случае VoIP, клиенты желающие соединиться обмениваются через SIP адресами полученными через STUN и направляют на друг друга поток трафика. В случае restricted NAT передача должна начаться с обеих сторон иначе NAT принимающей стороны решит, что пакеты нужно отбросить. Teredo например начинает слать пакеты пустышки, получение которых символизирует, что соединение уже установлено. Вы можете написать собственный Teredo клиент по спецификации, она довольно простая.
    STUN такой куций протокол потому, что он лишь дополнение для SIP. Но это не мешает использовать его для своих нужд.
    Ответ написан
    Комментировать
  • Как реализовать доступ к локальному веб-серверу за NAT через VPS?

    @none7
    Для начала поднять между малинкой и vps VPN вроде такого.
    Выполнить на vps команду echo 1 > /proc/sys/net/ipv4/ip_forward чтобы ядро перенаправляло сетевой трафик.
    Для того чтобы firewall не блокировал транзитный трафик
    iptables -A FORWARD -o $vps_main_interface -j ACCEPT
    iptables -A FORWARD -o $wireguard_interface -j ACCEPT

    Основной NAT
    iptables -t nat -A POSTROUTING -o $vps_main_interface -j MASQUERADE

    Проброс портов
    iptables -t nat -A PREROUTING -p tcp -i $vps_main_interface --dport 80 -j DNAT --to $client_ip
    .
    Как это прописать, чтобы всё сохранялось после перезагрузки зависит от дистрибутива. Также это упрощённая "магия" может сломаться по различным причинам и для того, чтобы разобраться почему это произошло, нужно, чтобы это перестало быть для Вас магией.
    Ответ написан
    Комментировать
  • Может ли смартфон "хакнуть" мой PC?

    @none7
    Самый страшный аспект Usb в том, что любое подключенное устройство может притвориться клавиатурой, мышью, флешкой и сетевой картой. И корпорация добра, как и любое вирьё получившее root могут сделать это смартфоном. Соответственно если Вы не вошли в систему риск минимален, возможен брутфорс, но он будет прекрасно виден на экране и очень вероятно возможен MITM. Если вошли в систему, то смартфон может получить права пользователя и например вытащить сохранённые пароли из файлов браузера, если sudo без пароля или есть дыры, то может получить полный доступ.
    Ответ написан
    Комментировать
  • Как настроить Ubuntu, чтобы использовать подсеть /64 ipv6?

    @none7
    В /etc/network/interfaces должно быть, что то вроде
    iface eth0 inet6 auto #если есть такая строчка, то просто добавить строки ниже.
        up ip addr add $выбранный_адрес dev eth0
        down ip addr del $выбранный_адрес dev eth0

    Хотя я не ручаюсь, что имя интерфейса именно eth0. Смотрите ip link show
    Ответ написан
    Комментировать
  • Как экспортировать в xml?

    @none7
    loadXml так не работает. К тому же в XML-документе должен быть только один корневой элемент, как в HTML не может быть двух тегов <html>. Пример:
    function getXmlRow($xml, $time, $day, $price, $description) {
        $names = array('time', 'day', 'price', 'description');
        $ret = $xml->createElement('date');
        foreach($names as $name){
            $ret->appendChild($xml->createElement($name, $$name));
        }
        return $ret;
    }
    $xml = new DomDocument('1.0', 'UTF-8');
    $dates = $xml->createElement('dates');
    
    for($i=0; $i <= 3; $i++)
        $dates->appendChild(getXmlRow($xml, '21:16', '2021-01-26', 6000, 'Delete project AND Serch a PHP learning'));
    
    $xml->appendChild($dates);
    echo $xml->saveXML();
    Ответ написан
    Комментировать
  • Почему не получается перемножать и делить assembler?

    @none7
    По моему дело в компиляторе Си. sizeof(al) != sizeof(short) отсюда и ошибка. Вторая ошибка это в том, что idiv принимает только один аргумент и делит dx:ax на указанный аргумент.
    Ответ написан
    Комментировать
  • Не работает json_decode?

    @none7
    Не думаю, что echo может напрямую выводить массивы. Используйте var_dump.
    Ответ написан
  • Возможные способы вывода графики?

    @none7
    В смысле .jpeg,.png,.gif? Нельзя. Если речь про прямой доступ к видеобуферу то он 0xA000:0x0000 представлен как массив RGB-структур.
    Есть такой полезный сайт https://wiki.osdev.org/User:Omarrx024/VESA_Tutorial
    Ответ написан
    3 комментария
  • Кирилица в c++, как работать с wstring?

    @none7
    locale::global(locale(".866", locale::all));
    На VS19+Win10 работать должно, где то ещё почти наверняка нет.
    Ответ написан
    Комментировать
  • Как правильно оформить inline вставку ассемблера в отдельный код для MASM?

    @none7
    На x64 под виндой эта функция лишена смысла, поскольку стандартное соглашение вызовов не предполагает смещения стека для передачи параметров. Независимо от флагов stdcall/cdecl, компилятор использует fastcall.
    Ответ написан
  • Задать переменной значение из txt?

    @none7
    Так и должно быть. Если Вы хотите прочитать весь файл в строку, то смотрите пример.
    Ответ написан
    Комментировать
  • R = ±2e* m как понимать эту формулу?

    @none7
    1. Я полагаю очевидно, старший бит традиционно указывает является ли число отрицательным. Ноль относится к положительным(±).
    2-3 нужно объяснять вместе. Мантисса это биты числа, сколько бы их не было для вычислений считается, что оно находится в диапазоне от 1 до 2, всё остальное дробная часть. Возьмём мантиссу 1,5 и умножим на 2. Так как число не влезает в диапазон, процессор просто добавляет степень двойки(2*e). Теперь он всё ещё хранит число 1,5 в мантиссе которое нужно умножить на 2 в первой степени(21*1,5). Если ещё раз умножить на 2, то будет во второй степени(22*1,5) и т.д. С числами меньше единицы, та же история 0.25 это мантисса 1 умноженная на 2 в минус 2 степени(+2-2*1).
    Ответ написан
    Комментировать