Задать вопрос
  • Как определять новые методы в производных классах?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Но согласно общей концепции, у обычного сотрудника не может быть подчиненных. Значит метод getListEmployee() не нужен родительскому классу Person.


    Нужен метод классу или не нужен зависит от его ответственности. Если вы собираетесь использовать Person для работы с сотрудниками любого типа (кстати, плохое название класса, не отражает сути), а у каких-то сотрудников в принципе могут быть подчинённые, то какой-то метод для этого должен присутствовать в Person. Удобство использования этого интерфейса будет зависеть от реализации.

    Так, например, можно добавить метод getListEmployee(), возвращающий список подчинённых (кстати, опять плохое название метода, не отражает сути), а реализация этого метода в классе Employee может возвращать пустой список.
    Или можно добавить метод getSubordinateEnumerator(), возвращающий интерфейс перечисления подчинённых, а в классе Employee возвращать из этого метода NULL.

    Если же вы не собираетесь использовать единый интерфейс Person, а, например, будете пытаться привести Person* к типу Employee* или Manager* с помощью dynamic_cast, то метод в Person не нужен.
    Ответ написан
    4 комментария
  • Как передавать UDP пакеты через определенный интерфейс?

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

    Всё верно, без фокусов эта схема работать не будет.
    Возможные фокусы:
    - посылать пакет через RAW сокет, чтобы маршрутизатор ядра не вмешивался;
    - посылать пакет не на адрес eth2, а на другой адрес. Править адрес назначения с помощью iptables, в таблице mangle, в цепочке POSTROUTING.
    Ответ написан
    1 комментарий
  • Какой будет путь к содержимому распакованной папки?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    /home/user/important/important
    Но ты забыл спросить "почему".
    Ответ написан
  • Как версионируются пакеты в linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Или все-таки нельзя ставить два пакета разных версий?

    Нельзя установить одновременно несколько версий одного и того же пакета.
    Если требуется иметь одновременно несколько версий программы/библиотеки, их оформляют как разные пакеты. Версия программы/библиотеки при этом часто используется как часть имени пакета.
    Например, у меня установлены одновременно gcc-4.8 и gcc-4.9:
    $ dpkg -l 'gcc-4.[89]' | sort
    +++-==============-============-============-=================================
    Desired=Unknown/Install/Remove/Purge/Hold
    ii  gcc-4.8        4.8.4-1      amd64        GNU C compiler
    ii  gcc-4.9        4.9.2-10     amd64        GNU C compiler
    | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
    |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
    ||/ Name           Version      Architecture Description

    Имена пакетов здесь: gcc-4.8 и gcc-4.9. По файлам они нигде не пересекаются.
    Ответ написан
    Комментировать
  • Почему после "umask u=rwx,g=rwx,o=" создаваемые файлы не имеют разрешения на запуск?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    touch testfile

    а где заветное и ожидаемое -rwx-rwx--- ???

    С помощью strace можно увидеть, что touch открывает файл с параметром mode = 0666, поэтому x там неоткуда взяться:
    $ strace -v -e open touch test
    open("test", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
    Ответ написан
  • Можно ли в Linux x64 собрать драйвер (модуль ядра) для Linux x86?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Всё что вам нужно, чтобы собрать модуль для ядра любой архитектуры любой версии -- это компилятор для этой архитектуры, исходники ядра и .config для этого ядра.
    Шаги такие:
    - распаковать/вычекнуть исходники ядра нужной версии
    - создать и сконфигурировать каталог сборки ядра: создать каталог, скопировать в него .config, выполнить
    make -C <каталог исходников ядра> \
    O=<каталог сборки ядра> \
    ARCH=<целевая архитектура> \
    CROSS_COMPILE=<префикс кросс-компилятора> \
    silentoldconfig

    - собрать ядро:
    make -C <каталог исходников ядра> \
    O=<каталог сборки ядра> \
    ARCH=<целевая архитектура> \
    CROSS_COMPILE=<префикс кросс-компилятора> \
    vmlinux

    - собрать модуль используя созданный на предыдущем шаге каталог:
    make -C <каталог сборки ядра> \
    M=<каталог исходников модуля> \
    ARCH=<целевая архитектура> \
    CROSS_COMPILE=<префикс кросс-компилятора> \
    modules


    CROSS_COMPILE можно опустить, если нужно использовать хостовый компилятор. Для x86 ARCH=x86
    Ответ написан
    1 комментарий
  • Почему не работает sscanf?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Чтобы работало с приведённой строкой, формат должен быть таким:
    sscanf(mycharp, "%[^'*']*,%[','^]", o, s);
    Исходный формат не работает, потому что обработка %[^'*'] остановится на входном символе *, и так там и останется, потому что последующая часть форматной строки не поглощает этот символ.
    Кроме того, вы, мне кажется, понаставили лишних апострофов внутри квадратных скобок. В форматной строке они интерпретируются буквально, т.е. формат "%[^'*']" означает "символы, кроме апострофа, звёздочки или апострофа". Вот так тоже должно работать:
    sscanf(mycharp, "%[^*]*,%[,^]", o, s);
    Ответ написан
    3 комментария
  • Как узнать MINOR номер устройства в современном linux в режиме ядра?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    filp->f_path.dentry->d_inode->i_rdev вместо filp->f_dentry->d_inode->i_rdev
    Ответ написан
  • Как проверить, что патч подойдет к исходникам обновленного ядра?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Патч содержит в себе относительные пути к файлам и должен применяться в определённом каталоге. Обычно им должен быть корневой каталог проекта, а патч содержит на 1 уровень каталогов больше. Лишний уровень обрезается опцией -p1. Это единица, а не строчная l, как у вас написано.
    patch -p1 --dry-run < patch
    Ответ написан
    Комментировать
  • Почему busybox вдруг ни с того ни с сего уходит в ребут?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Из-за чего это может быть?

    Из-за содержимого /etc/inittab? Или /etc/crontab?
    Ответ написан
  • О чём говорят такие результаты MemTest86?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Обрабатывают ли операционки (Винда/Убунту) данную ситуацию как-нибудь? Или может нужно какую-нибудь прогу поставить, которая при загрузке сразу будет резервировать данный битый участок, и таким образом другие программы не смогут его использовать?

    Линуксу можно передать параметр ядра из загрузчика:
    memmap=nn[KMG]$ss[KMG]
                            [KNL,ACPI] Mark specific memory as reserved.
                            Region of memory to be reserved is from ss to ss+nn.
                            Example: Exclude memory from 0x18690000-0x1869ffff
                                     memmap=64K$0x18690000
                                     or
                                     memmap=0x10000$0x18690000
                            Some bootloaders may need an escape character before '$',
                            like Grub2, otherwise '$' and the following number
                            will be eaten.

    Для вашего случая: memmap=32M$0x241A3D470
    Ответ написан
    Комментировать
  • Как пофиксить "the repository doesn't have a Release file"?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    the repository doesn't have a Release file -- это не ошибка, а предупреждение. Ошибка дальше:
    E: Failed to fetch screenshots.getdeb.net/dists/xenial-getdeb/apps/bi... Cannot initiate the connection to screenshots.getdeb.net:80 (2400:cb00:2048:1::681c:187d). - connect (101: Network is unreachable) [IP: 2400:cb00:2048:1::681c:187d 80]

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Это может быть результатом нажатия ^s или ^a-s. Лечится нажатием ^q или ^a-q соответственно.
    Ответ написан
    1 комментарий
  • Как работать с файлами WinAPI из ассемблера?

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

    Открыть диск как файл (имя файла -- \\.\PhysicalDriveX, X = 0...), дальше всё как с файлом -- SetFilePointer, WriteFile, ...

    На пример в загрузочный сектор записать свой загрузчик?

    Для этого не нужен ассемблер.
    Ответ написан
    Комментировать
  • Как включить русский язык в программе?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    По приведённому отрывку создаётся впечатление, что можно передать eng или ru параметром командной строки и это повлияет на значение байта byte_451fc.
    Ответ написан
    Комментировать
  • Несовместимость gnu make 3.81 и 4.2.1. Как разрешить?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    файл FreeRTOS_for_stm32f2/FreeRTOS.h откоторого зависят все цели в следующем правиле не существует:
    build/obj/%.obj:        %.cpp $(USER_CFG_H_FILE) $(FREE_RTOS_H_FILE)


    Чтобы заработало должно быть
    FREE_RTOS_H_FILE        := FreeRTOS_for_stm32f2/include/FreeRTOS.h

    вместо
    FREE_RTOS_H_FILE        := FreeRTOS_for_stm32f2/FreeRTOS.h
    Ответ написан
  • Почему в C++ нужно строить всю программу на ООП (длинный вопрос)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Мне нравится код ядра Linux. Никакого разделения программы на объекты там нет, и всё там окей, прекрасно без такого разделения живут.

    Да-да-да, https://lwn.net/talks/fosdem-kobject/

    Полиморфизм есть, но он есть только там, где это нужно. И никакого "А давайте всю программу разобьём на классы, просто потому что так надо" тут нет. На мой взгляд, Linux устроен совершенно верно, именно так и нужно писать.

    Ага, только он не был таким всегда. Его текущий дизайн -- это результат эволюции. Эволюция вызвана стремлением повысить качество. Чтобы повысить качество нужно уменьшить сложность. ООП -- один из возможных путей уменьшения сложности.

    Окей, что я хочу в качестве ответа. Идеальной была бы ссылка на какую-нибудь статью в блоге. Где бы объяснялось, зачем нужно делить программу на объекты. С примерами. Скажем, разбиралась бы какая-нибудь типичная задача.

    Сюда идеально подходит книга "Паттерны проектирования". (скан, кстати, не очень, пропущен важный кусок истории в конце). Только не надо читать про сами паттерны. Прочитай всё остальное: откуда они взялись, какова их история, как ими пользоваться.
    Ответ написан
    4 комментария
  • Почему не работае скрипт?

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

    Для того что вы хотите нужно не запускать этот скрипт а загружать его в текущий шелл командой source или . :
    $ . ./path.sh

    Эта переменная только для сеанса в терминале или пока ПК не выключу?

    Эта переменная -- для шелла который её выполнил и его потомков. Запуск скрипта порождает новый шелл, который сразу завершается.

    Можно ли у LD_LIBRARY_PATH записать несколько разных путей?

    Да, через двоеточие.
    Ответ написан
    Комментировать
  • Почему связыка find/xargs срабатывает только на одном файле?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Ваш скрипт на питоне обрабатывает единстенный файл-параметр. xargs без дополнительных параметров вызывает то что ему дали с наибольшим возможным количеством параметров. Чтобы эта связка работала пишите так:

    find -type f -name "*.fb2" | sort | xargs -n1 python bfix.py
    Ответ написан
    3 комментария
  • Почему не работает make для другого каталога?

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

    Потому что вы что-то делаете неправильно.

    Если серьёзно -- то как вы хотите, чтобы мы поняли, что у вас происходит, если вы не дали нам никакой полезной информации? Makefile покажите, что ли.
    Ответ написан
    1 комментарий