• Как в Си вывести в консоль без записи в буфер?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Если я использую printf("asd"), то весь текст в кавычках будет выведен на экран и записан в лог файл. Вот такая команда: './a.out > file.log'.

    Здесь несколько несуразностей: 1) printf в ./a.out > file.log не выведет ничего на экран, всё будет перенаправлено в файл. но 2) сам printf об этом ничего не знает. Он выводит данные в поток стандартного вывода, куда они перенаправляются потом -- не его дело. 3) оператор > перенаправляющий вывод -- это инструкция командной оболочке как запускать программу, к самой программе отношения не имеет.

    Есть ли какая другая команда вывода, которая будет текст выводить только в терминал, без записи в файл?

    Есть! ./a.out, без каких-либо изменений в коде.
    Ответ написан
    4 комментария
  • По какой причине возникает ошибка?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    По какой причине возникает ошибка?
    неопределённая ссылка на символ «dlclose@@GLIBC_2.2.5»

    -ldl отсутствует в команде линковки или указан слишком рано?
    Ответ написан
  • По какой причине происходит дубляж реализации?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    webderiverxx все файлы .h, видимо реализация написана на .h файлах

    В .h файлах можно написать и так, что вот этого всего не будет. Если ты нам покажешь этот webdriverxx.h мы наверно сможем подсказать, что там нужно изменить для этого.

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

    Ты если такое говоришь, то, видимо, не вполне понимаешь, для чего используется защита макросом препроцессора.
    Ответ написан
  • Как найти имя процесса НЕ содержащее в названии заданную строку при помощи bash?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    если нам нужны имена процессов с именем НЕ содержащим в названии подстроку

    grep -v
    Ответ написан
    2 комментария
  • Как сравнить два списка с помощью хеш-кода?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Значит, если будет стоять задача сравнить два списка (одинаковы ли они), то достаточно вычислить хеш двух списков? Или просто так совпало, что их хеши одинаковые?

    Если хеши получились разными то со 100% уверенностью можно сказать, что списки разные. Если хеши получились одинаковыми, то с высокой (в зависимости от качества хеширующей функции, но однозначно не 100%) степенью уверенности можно сказать, что списки одинаковые. 100% уверенность в равенстве списков с одинаковыми хешами даёт только поэлементное сравнение списков.
    Ответ написан
    1 комментарий
  • Как создать динамическую библиотеку, которая зависит от другой библиотеки?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    гугля, находил предложения с LD_LIBRARY_PATH=... . Но разве флаг -L при компиляции не служит той же самой цели?

    нет, не служит. -L говорит о том, где искать любые библиотеки во время линковки приложения. LD_LIBRARY_PATH говорит о том, где искать динамические библиотеки во время выполнения. Информация из -L со времени линковки нигде не сохраняется. Можно зашить в слинкованный бинарник пути к библиотекам, но это делается другими опциями (см. опцию линкера -rpath). Во время выполнения динамические библиотеки могут быть где угодно, не обязательно там, где они были во время линковки.

    Как создать динамическую библиотеку, которая зависит от другой библиотеки?

    вопрос, кстати, неправильный. Ты создал такую библиотеку. Если ты посмотришь в вывод readelf -d libwindow.so | grep NEEDED то там должна быть ссылка на libSDL. Твоя проблема в том, что сама libwindow.so не найдена.
    Ответ написан
    3 комментария
  • Как лучше сделать параллельный for?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В чем между ними разница и где какой предпочтительно использовать

    В том, что std::for_each -- это алгоритм из стандартной библиотеки C++, а tbb::parallel_for -- это часть intel Threading Building Blocks. Если проект не использует TBB, то выбор очевиден. Если использует, то у tbb::parallel_for несколько больше возможностей по управлению разбиением интервала на части и выполнением рабочих потоков.
    Ответ написан
  • Как rsync сжимает при передаче данных?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Не будет ли он на сервере создавать какие то архивы?

    Нет. rsync -z сжимает на лету.
    Из man rsync:
    --compress, -z
                  With this option, rsync compresses the file data as it is
                  sent to the destination machine, which reduces the amount
                  of data being transmitted -- something that is useful over
                  a slow connection.
    Ответ написан
    Комментировать
  • Есть ли хорошие книги для глубокого изучения Linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    понять работу ядра Линукс

    Порекламирую в очередной раз свой список: https://qna.habr.com/answer?answer_id=392065#answe...
    Ответ написан
    1 комментарий
  • Почему не компилируется макрос после перехода с visual studio на linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему не компилируется
    НАЗВАНИЕ_КЛАССА ## ::
    error: pasting "Журнал" and "::" does not give a valid preprocessing token

    потому что не нужно эти токены склеивать, им будет хорошо и по отдельности. Просто выкинь ##.
    Ответ написан
  • Почему не компилируется макрос?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему не компилируется макрос?

    #define НФлагИнициализации(НАЗВАНИЕ1, НАЗВАНИЕ2) \
        Определение2Названия(НАЗВАНИЕ1, НАЗВАНИЕ2) ## флаг_инициализации


    error: pasting ")" and "флаг_инициализации" does not give a valid preprocessing token

    потому что ты думаешь, что сначала выполнится подстановка макроса Определение2Названия, а потом к результату будет приклеен флаг_инициализации, в то время как на самом деле сначала препроцессор делает подстановку НАЗВАНИЕ1 и НАЗВАНИЕ2 и приклеивает флаг_инициализации к скобочке, после чего рапортует тебе о том, что полученный результат выглядит не очень.
    Чтобы заработало тебе прийдётся тащить ## флаг_инициализации внутрь Определение2Названия.
    Ответ написан
  • Моя программа не грузиться на VB и в BIOS не отображается SANDISK?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    У тебя тут три разных вопроса.
    Моя программа запускается в bosh но не реагирует на прерывания клавиш


    А какую реакцию ты ожидаешь? Введённый символ ты не печатаешь, si ты не перезагрузил, так что puts_loop загружает из памяти следующий 0 и тоже ничего не печатает. Можно сделать так чтобы увидеть, что int 16h таки работает:

    keyboard_loop:
            mov ah, 0
            int 16h
            mov ah, 0Eh
            int 10h
            jmp puts_loop


    iso образ созданный dd не запускается в VB

    А почему ты думаешь, что из mbr можно создать iso с помощью dd? Его вообще-то надо в правильное место поместить, не абы куда. Например это можно сделать так: mkisofs --no-emul-boot -o test.iso -b test.bin . где test.bin -- это твой бинарник бут-сектора.

    а загрузочная флешка не отображается в BIOS

    Это видимо следствие из того, как ты сделал iso который закатал на флэшку.
    Ответ написан
    Комментировать
  • Как осуществить взаимодействие клиента и сервера на основе протокола TCP/IP?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Если у тебя посреди функции main сервера действительно стоит return x | y;, то она не может никогда вызвать send, а программа-сервер должна просто завершаться после расчёта НОД.

    А программа-клиент при этом будет получать ошибку из recv, но поскольку ты её не обрабатываешь, то дальше она будет пытаться выводить ответ из буфера в который не было ничего принято.

    не знаю, как правильно найти НОД в данном случае:

    в данном случае x и y нужно извлечь из принятой из сокета строки, математика дальше в порядке, вместо return x | y нужно просто использовать x | y в itoa. Res и всё что с ним связано можно выкинуть, поскольку оно всё равно никак не используется.

    Но вообще, конечно, из кода видно, что твоя проблема не с НОД и не с сетевым программированием, а с тем, что С/С++ ты, судя по всему, просто не знаешь. Учи основы, не жди халявы.
    Ответ написан
    Комментировать
  • Как работает выделение памяти malloc?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    char *str = malloc(0);
    Правильно ли я понимаю, что в str находится начало выделянно памяти на 0 байт


    Вот что говорит стандарт (c99, 7.20.3:1) о выделении 0 байт через malloc:

    If the size of the space requested is zero, the behavior is implementation-
    defined: either a null pointer is returned, or the behavior is as if the size were some
    nonzero value, except that the returned pointer shall not be used to access an object.


    Поскольку твоё обращение к этой памяти не вызывает SEGFAULT, то да, malloc вернул не NULL. Сколько байт реально было выделено зависит от реализации.

    а дальше идет запись символов в память, которая для нас не предназначалась?


    Да. Использовать эту память согласно стандарту нельзя.
    Ответ написан
    Комментировать
  • Самопроизвольное объявление define'ов в проекта?

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

    А на самом деле где этот define определяется и как это место относится ко всем этим заголовочным файлам?

    Разве препроцессор не последователен и может включать файлы в том порядке, в каком ему заблагорассудится, а не как я написал?

    Нет, не может, но возможно ты не вполне понимаешь сам, в каком порядке ты написал их подключение. Так, например, Helpers/VulkanTexture.h и VulkanTexture.h -- это один и тот же файл, или разные? Если один и тот же, то из-за #pragma once в нём он не подключается в VulkanglTFModel.h, а если разные -- то подключается.

    Понять, что фактичиски куда подключается можно выполнив вместо шага компиляции только препроцессирование (например, для gcc заменив в команде компиляции ключ -c на -E). В выводе препроцессора не видно дефайнов, но видно когда подключается тот или иной файл и видно весь исходный код не относящийся к препроцессору.
    Ответ написан
    Комментировать
  • Почему появляется такая ошибка?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    что тут неправильно?

    для однозначного ответа на этот вопрос не хватает определения типа Student.
    Но судя по тому как всё падает, в Student есть не-POD поля, выделяющие и освобождающие память, например std::string или что-то типа того. Загружать их из файла просто читая записанное ранее содержимое памяти нельзя, потому что загруженные указатели будут ссылаться на невыделенную память, такие типы данных нужно по-честному сериализовывать.
    Ответ написан
    Комментировать
  • Как вычисляется эффективный адрес относительно счетчика команд?

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

    Оттуда, что складываемые числа -- RIP 0x7ff778a06497 и смещение 0x67f9. Смещение записано в поле инструкции mov в формате little endian.

    что это за значение 88 13 00 00 ......... и Val = 5000 ?

    Я так понимаю, что это иллюстрация, что по адресу 0x7ff778a0cc90 оказались байты 0x88, 0x13, 0x00..., которые после загрузки в регистр rax дали значение 0x1388 == 5000
    Ответ написан
    Комментировать
  • Почему при вызове return вызывается конструктор копирования, а не перегрузка оператора =?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    coffeeMachine mix = device + machine;
    вызывает перегрузку конструктора копирования, а не перегрузку оператор =, почему?

    Потому что ты создаёшь здесь экземпляр класса, это делается конструктором. Поскольку ты хочешь его инициализировать другим экземпляром, используется конструктор копирования. Дело в том, что оператор = ожидает слева сконструированный объект, а в данной записи его нет.

    А если написать вот так:
    coffeeMachine mix; mix = device + machine;
    то ты сначала создаёшь экземпляр со значением по умолчанию, а потом вызываешь оператор =.
    Ответ написан
    Комментировать
  • Как поставить пробел после запятой в строке?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В чём же проблема?
    for (int i = strlen(sentence); i >= pos; i--) {
        sentence[i + 1] = sentence[i];
        sentence[pos] = ' ';
      }

    Должно быть
    for (int i = strlen(sentence); i > pos; i--) {
        sentence[i + 1] = sentence[i];
      }
      sentence[pos + 1] = ' ';
    Ответ написан
    Комментировать
  • Как работает long long int в C++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    где найти информацию о внутреннем устройстве long long int и unsigned long long int?

    В стандарте: eelis.net/c++draft/basic.fundamental

    у меня появилось впечатление, что long long int склеен из двух long int и дает псевдо длину в 64 бита. Поправьте меня, если я не прав

    Можно и так на это смотреть, но почему "псевдо"? Вполне реальные 64 бита, на машинах с 64-битными регистрами это вообще "родной" тип данных.
    Ответ написан
    3 комментария