• Как правильно вывести массив символов?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    проблема в том, что вместо массива символов программа выводит просто пустую строку.

    программа выводит пустую строку, потому что в tmp -- пустая строка. Потому что i = strlen(str) помещает в i индекс 0-терминатора строки str, а не последнего символа перед ним. И в конце строки tmp сейчас нет 0-терминатора, так что puts(tmp) выведет мусор после перевёрнутой строки, если поправить инициализацию i.
    Ответ написан
    3 комментария
  • Как понять, почему не работает ни один браузер в linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    можно попробовать запустить firefox под strace а потом внимательно почитать лог начиная с конца в поисках ошибок доступа. Типа того: strace -fvo trace firefox
    Ответ написан
    Комментировать
  • Можно ли эмулировать Raspberry Pi 4 в Qemu?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    (чтобы не тратить время).
    Нужно для сборки приложения для RPi4 без железа. Кросскомпиляцию не осилил.

    С целью "чтобы не тратить время" лучше осилить кросс-компиляцию. Потому что производительность эмулируемого на x86 arm-устройства так себе.
    Ответ написан
    Комментировать
  • Почему при работе с бинарными файлами .exe вызвал срабатывание точки останова СИ?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Первая функция работает, а при вызове второй функции - "срабатывание точки останова" при присвоении переменной fp указателя на поток - при вызове функции fopen(). Помогите разобраться с проблемой не понимаю, где ошибка.

    Вторая функция как-то очень сильно завязана на первую: arr она не инициализирует и считает, что там достаточно места для содержимого файла. Но это всё происходит после заявленной проблемы.
    В первой функции вызовы gets читают строчки неограниченной длины в какие-то поля твоей структуры. Определения структуры ты не привёл, но мой магический шар говорит, что gets вполне может вылезти за пределы полей в которые он читает и поломать кучу. Можно попробовать заменить gets(x) на fgets(x, sizeof(x), stdin).
    Ответ написан
  • Как создать массив с ведущими нулями в Bash?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    for i in ${hr[@]}; do
    echo ${hr[i]}
    done

    Bash думает, что если число начинается с 0, то оно в восьмеричной системе счисления и числа 8 в ней нет. Что делать?

    Выбрать, что же именно у тебя лежит в массиве -- строчки или индексы. И если выбрал строчки, то не интерпретировать их тут: echo ${hr[i]} как индексы. А если выбрал индексы, то следовать правилам написания чисел.

    Я бы сделал так:
    #!/bin/bash
    
    hr=(00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23)
    
    for i in ${hr[@]}; do
    echo $i
    done
    Ответ написан
    Комментировать
  • Qemu как правильно запускать vm?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как запустить vm в молчаливом режиме, без открытия ее консоли?

    -nographic -serial none -monitor none
    есть для mipsel какие либо акселераторы, типа kvm?

    Есть, но надо понимать, что kvm требует, чтобы гостевая архитектура совпадала с хостовой, т.е. qemu для этого нужно запускать на mips-хосте.
    Ответ написан
  • Как найти длину массива?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    MaxSymb Db 9
    RealSymb Db ?
    StringT db 1 dup (' ')

    Здесь должно быть StringT db 9 dup (' '), иначе ввод затрёт то что там дальше в памяти лежит.

    я пытался и делать так mov cx, InBuff[0] , mov cx, InBuff[1] без разницы.

    Эти инструкции загружают 16-битный регистр из памяти, а значение длины -- 8-битное. Правильно было бы как-нибудь так: mov cl, [RealSymb]

    len equ $ - StringT - не выходит, тоже 1 выдаёт

    Это вообще определяет константу, значение которой равно разности текущего адреса и адреса StringT. Если это делать в твоей программе сразу следом за определением StringT, то 1 и получится, потому что длина StringT у тебя -- 1 байт.
    Ответ написан
    6 комментариев
  • С++: Ошибка потоков как исправить?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Client arr_all[numeric_limits<int>::max()];

    Это сильно, статический массив на 2 млрд индексов...

    main.cpp:(.text+0x527): перемещение обрезано по месту: R_X86_64_32 у неопределённого символа «.bss»
    main.cpp:(.text+0x536): перемещение обрезано по месту: R_X86_64_32 у неопределённого символа «.bss»

    ...а это -- последствия. В принципе сборку этого можно побороть опцией -mcmodel=large, но там будут дальнейшие проблемы во время выполнения и это точно не нужно.

    Ограничьте размер этого массива каким-нибудь разумным значением или сделайте его динамическим.
    Ответ написан
    Комментировать
  • Почему я не могу получить доступ к элементу unordered_map обходом?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    unordered_map<string, button>::const_iterator it_button;
    ...
    it_button->second.hoverReact(m, w); //проблема

    Почему second это CONST button? Почему не просто button?

    Потому что const_iterator же.
    Ответ написан
    Комментировать
  • Как посмотреть последние введенные команды в терминале с датой и временем их ввода?

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

    man bash -> искать HISTTIMEFORMAT -> … -> PROFIT
    Например, можно добавить export HISTTIMEFORMAT='%F %T ' в ~/.bashrc
    Но, разумеется, дату/время уже залогированным командам это не добавит.
    Ответ написан
    Комментировать
  • NASM смещение в массиве (invalid effective address)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как в nasm можно выполнить смещение?
    [string + cx]
    invalid effective address

    дело не в ассемблере, а в устройстве процессора. x86 имеет в 16-битном режиме режим адресации "база + смещение", но базой могут выступать только регистры bx, si, di и bp. При этом di адресуется относительно сегментного регистра es, а bp адресуется относительно сегментного регистра ss.
    Это задокументировано в табличке 2-1 "16-Bit Addressing Forms with the ModR/M Byte" в томе 2А Intel Developer Manual'а, доступного, например, здесь.
    Ответ написан
  • Как сделать посекторную запись на диск?

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

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть ли у регистров адреса как у памяти?

    Адреса есть (и эти адреса кодируются в инструкциях обращающихся к регистрам напрямую), но обычно не как у памяти. Наличие у регистров адресов как у памяти зависит от архитектуры. Кроме упомянутого AVR такая фича есть, например, у 8051.

    Почему нет?

    Потому что доступ к памяти и доступ к регистрам устроены сильно по-разному в серьёзных процессорах.
    Ответ написан
    Комментировать
  • Правильно ли я хочу использовать либы в ассемблере?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Это нормально так сочетать библиотеки с ассемблером?

    Вполне.
    Ответ написан
    Комментировать
  • Как программа получает ввод?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Здесь нет ни putchar(), ни scanf(), ни тому подобного.

    есть c = getchar().

    ОТКУДА программа получает ввод?

    из стандартного потока ввода, откуда getchar читает символы.
    Ответ написан
    Комментировать
  • Зачем использовать системный вызов poll для ожидания события от драйвера?

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


    Если поток только читает, то действительно, на первый взгляд необходимости в вызове poll не видно.

    (в голову приходит только один вариант, когда необходимо принудительно прихлопнуть поток и если использовать таймаут, то не требуется прерывать системный вызов, хотя если принудительно завершить поток, то ядро по идее само прервет системный вызов)


    Если системный вызов втыкается в ожидание в драйвере, то драйвер сам решает, прерываемо это ожидание или нет. Может быть драйвер реализует операцию poll с возможностью прерывания, а read -- без.
    Ответ написан
    Комментировать
  • Синхронизация ресурсов в драйвере при системных вызовах?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В момент, когда функция read блокирована (по факту системный вызов (syscall) не вернул результат в пользовательское пространство), то при вызове другого системного вызова того же драйвера, например, write, необходимо ли в самом драйвере синхронизировать общие данные, которые используются и в read и в write?

    Да.

    Или выполнение системных вызовов как-то гарантировано регламентировано и прерывания отключены

    Нет, вообще никак не регламентировано.
    Ответ написан
  • Как правильно в регистр задать строку через at&t втроенным ассемблером?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я вижу вот такой рабочий вариант (и при этом не уверен в том, какой порядок байт имеется в виду в оригинальной инструкции):
    movl    ((((('V' << 8) + 'M') << 8) + 'X') << 8) + 'h', %eax
    Ответ написан
  • Как правильно накатить nano на git что бы ничего не сломать?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    из man git:
    GIT_EDITOR
               This environment variable overrides $EDITOR and $VISUAL.
               It is used by several Git commands when, on interactive mode,
               an editor is to be launched.
               See also git-var(1) and the core.editor option in git-config(1).

    Т.е.
    - можно глобально установить переменную окружения GIT_EDITOR
    - или в глобальном .gitconfig установить опцию editor в секции core
    - или в .git/config нужного репозитория установить опцию editor в секции core
    Ответ написан
    Комментировать
  • Как авторизоваться в Linux Kodachi?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Обобщённый способ решения подобных проблем -- загрузка ядра с параметрами rw init=/bin/sh, выполнение в появившейся оболочке команды passwd с желаемыми параметрами (например, passwd -d root) и продолжение загрузки командой exec /sbin/init.
    Ответ написан