• Почему поле fd в событии epoll_event не задано?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    e.data.fd = cfd;
    e.data.ptr = (void*)cfd;


    epoll_data -- это union, не нужно его инициализировать сначала одним, а потом другим:
    typedef union epoll_data {
                   void    *ptr;
                   int      fd;
                   uint32_t u32;
                   uint64_t u64;
               } epoll_data_t;
    
               struct epoll_event {
                   uint32_t     events;    /* Epoll events */
                   epoll_data_t data;      /* User data variable */
               };


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

    в документации сказано, что там должно быть значение, которое было в поле data во время вызова epoll_ctl.

    Кроме того, 0 -- вполне нормальный файловый дескриптор.
    Короче, я попробовал, у меня работает. Если у тебя не работает -- приведи весь код.
    Ответ написан
    1 комментарий
  • Что даст дополнительное обучение по информационной безопасности системному администратору?

    @CHolfield
    начиная с некоторого объема и начиная с определенной категории персональных данных и других защищаемых законом сведений (в том числе, коммерческой тайны), закон требует наличия в конторе-операторе хотя бы одного должностного лица с оконченным образованием по теме ИБ или техническая защита информации. Так што проси прибавки, функции по обеспечению этой самой безопасности скорее всего перекинут на тебя, ответственности прибавится - пусть башляют.
    Ответ написан
    1 комментарий
  • Компиляция c++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    получается mainx узнает о том что есть функция printx() на этапе линковки [mainx.o] и [printx.o]?

    Да.

    Каким образом происходит передача информации в [mainx] что функция printx() существует?

    Это работа линковщика связывать ссылки на неопределённые символы с определениями этих символов.
    В main.o в месте вызова printx ставится команда вызова, в секции символов заводится неопределённый символ printx а в секции релокаций заводится запись, связывающая команду вызова с символом:

    objdump -dr mainx.o
    ...
    0000000000000000 <main>:
       0:   55                      push   %rbp
    ...
      3a:   89 c7                   mov    %eax,%edi
      3c:   e8 00 00 00 00          callq  41 <main+0x41>
                            3d: R_X86_64_PLT32      _Z6printxi-0x4
      41:   b8 00 00 00 00          mov    $0x0,%eax
      46:   c9                      leaveq 
      47:   c3                      retq   
    ...


    readelf -a mainx.o
    ...
    Relocation section '.rela.text' at offset 0x580 contains 12 entries:
      Offset          Info           Type           Sym. Value    Sym. Name + Addend
    ...
    00000000003d  001400000004 R_X86_64_PLT32    0000000000000000 _Z6printxi - 4
    ...
    
    Symbol table '.symtab' contains 25 entries:
       Num:    Value          Size Type    Bind   Vis      Ndx Name
    ...
        20: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND _Z6printxi
    ...


    В printx.o в секции символов заводится символ, ассоциированный с адресом в коде, где определена функция printx:

    readelf -a printx.cpp
    ...
    Symbol table '.symtab' contains 24 entries:
       Num:    Value          Size Type    Bind   Vis      Ndx Name
    ...
        14: 0000000000000000    75 FUNC    GLOBAL DEFAULT    1 _Z6printxi
    ...

    Здесь value == 0 -- потому что printx оказалась по адресу 0 в секции .text.

    Линковщик объединяет входные секции согласно скрипту линковки, после чего вставляет конечные адреса символов в места, которые ссылаются на них.
    Ответ написан
    Комментировать
  • Как вы настраиваете табуляцию?

    @abmanimenja
    Современные (и не очень современные) IDE - это умеют сами.
    Да и не только IDE, а и специализированные программистские редакторы - тоже умеют.

    Общепринятых нет. В некоторых языках есть традиции. В некоторых фирмах есть code style guide.

    Язык - Go .

    Вы вот сейчас серьезно?

    Go чуть ли не единственный, где данной проблемы нет от слова "вообще". Вообще нет.

    Утилита go fmt делает так, как всенепременно рекомендуется делать для всех исходников, написанных на этом языке. Умеет работать как с отдельными файлами, так и с целыми каталогами файлов. Все делает совершенно автоматически.
    Ответ написан
    4 комментария
  • Как вы настраиваете табуляцию?

    для php psr-2 гласит
    Code MUST use 4 spaces for indenting, not tabs.

    для python pep-8 гласит
    As mentioned above, you should use spaces instead of tabs when indenting code. You can adjust the settings in your text editor to output 4 spaces instead of a tab character, when you press the Tab key.
    Ответ написан
    Комментировать
  • Как в Git продолжать разработку без отправки изменений на удалённый репозиторий?

    1) Фичу 1 оставить в своем репозитории и не лить ее в мастер локально
    2) Если для Фичи 2 изменения в Фиче 1 не нужны, просто переходишь в мастер, делаешь гит пулл и делаешь бранч для Фичи 2
    2а) Если для Фичи 2 нужны изменения, которые ты сделал в Фиче 1, то после второго шага делаешь gi rebase F1
    3) Перед тем как делать мерж реквест и к первой фиче и ко второй делаешь
    git fetch && git rebase origin/master таким образом ты в ветку подтянешь накопленные в мастере обновления и решишь конфликты если возникнут
    Ответ написан
    4 комментария
  • Нужен антивирус для слабого нотбука?

    flapflapjack
    @flapflapjack
    на треть я прав
    если обновления включены, используйте стандартный windows defender. Он есть в виндоусах начиная с XP.
    Ответ написан
    Комментировать
  • Требуется совет по разрешению дилеммы интеграции Linux в Winodws, как быть?

    bingo347
    @bingo347
    Crazy on performance...
    Я как то уже писал на хабр статью, про мое использование WSL
    https://habr.com/ru/post/412633/
    используя я его с GUI (Xfce) и норм терминалом

    так же для себя писал хелпер на шарпе (хост) + ноде (WSL), для автоматическим рулением vcxsrv (X сервер под винду), WSL, а так же прокидыванием системной раскладки в WSL
    https://github.com/bingo347/XHelper

    ну и еще добавлю, что перешел сейчас на debian (когда писалась статья его еще не было в сторе), в нем изначально меньше мусора под снос
    впринципе все тоже самое можно провернуть и с виртуалкой
    а у virtualbox еще есть режим интеграции рабочего стола
    Ответ написан
    1 комментарий
  • Как автоматизировать сборку зависимостей программы?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Смотрите в сторону любого менеджера зависимостей вроде Conan или vcpkg. У конана точно есть интеграция с CMake. Только учтите, что много чего вам всё равно придётся писать руками. Управление зависимостями -- это головная боль в C++, т.к. язык очень старый. Обычно у всех компаний есть свои велосипеды для этого.

    С помощью связки CMake + Conan реально получить то, что вы хотите.

    Следующим шагом будет создание установщика для уже скомпилированной программы, который будет устанавливать программу на компьютер пользователя. Тут всё ещё хуже на самом деле :) Но это уже другой вопрос.
    Ответ написан
    2 комментария
  • Как автоматизировать сборку зависимостей программы?

    @rPman
    Возьмите тот же make, мы все привыкли что makefile содержат какой-нибудь автогенирированный эпический код, в котором уже давно никто полноценно не разбирается, но вообще то это неплозая система автоматического контроля версий файлов и сборки с учетом зависимостей.

    Когда вы пишите
    целевой_файл:используемые файлы
      командная строка для сборки целевого файла
    вы фактически описываете процесс, когда make проверяет версии используемых файлов по цепочкам зависимостей автоматически и запускает соответствующие команды.

    Для каждой своей зависимости у вас можно написать bat-файл, который переходит в нужный каталог и пересобирает ее, затем копирует результат в каталог вашего проекта. Вы можете для каждого написать по паре строчек в вашем makefile указав в качестве используемых файлов вообще все файлы каждого проекта или лучше какой-нибудь один (например index файл из их git каталога) и все, при любом обновлении у вас будет происходить запуск сборки. Затем вы можете добавить этот makefile в ваш проект (либо вручную прописать его вызов) на сколько я помню в visual studio есть куча возможностей для этого.

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

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    1. Выбираете 1-е число из полного диапазона.
    2. Выкидываете множество выпавшего числа.
    3. Выбираете 2-е число из оставшегося диапазона.


    Например:
    1. случайное из [0, 2346] оказалось 105 из диапазона "B"
    2. выкидываем диапазон B, остаётся [0, 1902], т.к. длина "B" 544-101+1 = 444, 2346 - 444 = 1902
    3. случайное из [0,1902] оказалось, например, 404. Для чисел выше 100 добавляем 444 и получаем 848 из диапазона "C" по старому стилю )
    Ответ написан
    Комментировать
  • Как правильно искать работу (откликаться на вакансии) без опыта работы?

    opium
    @opium
    Просто люблю качественно работать
    Писать что знаете
    Ничего не писать
    На любые вакансии откликаться
    Ответ написан
    Комментировать
  • Как снизить нагрузку на БД или какую БД использовать?

    landergate
    @landergate
    IT-шный jack-of-all-trades
    Миллионы записей - это совершенно обычный и, я бы сказал, крайне небольшой кейс для MySQL.

    Самое быстрое: отпрофилировать запросы (например, performance_schema=1 и подключить sys-таблицы, они наполнятся данными по прошествии времени), найти неоптимизированные индексами и добавить недостающие индексы на этих таблицах.
    Ответ написан
    8 комментариев
  • Где почитать как работают беспроводные наушники?

    @terka43
    В Гугле забанили?
    аудиоресивер и Bluetooth декодер это плата, батарея, выходы на динамики, если надо, то можно ещё и микрофон запилить.
    По Bluetooth спариваются 2 устройства, потом поток передаётся на декодер, потом усилитель, потом в динамики
    Ответ написан
    Комментировать
  • Как собрать .c проект для Windows 10?

    myjcom
    @myjcom
    однако меня заверили, что и на 10 это возможно

    https://sourceforge.net/p/wipfw/discussion/388595/...
    I use mingw to compile userland part and NTDDK + VC6 to build sys driver.
    Ответ написан
    1 комментарий
  • Чем отличается обявление int* a от int *a в Си?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега C
    Седой и строгий
    Ни чем не отличается. Пробельные символы допустимо ставить в любом месте, где они не разрывают ключевое слово, идентификатор или константу. Все варианты ниже полностью эквивалентны:
    int*a;
    int* a;
    int *a;
    int * a;

    Но есть некоторая тонкость. Если посмотреть на синтаксис объявления нескольких переменных:
    int * a, * b, c, * d, e; // a, b и d - указатели, c и e - числа

    то будет видно, что "звездочка" является скорее модификатором переменной, чем модификатором типа. Чтобы подчеркнуть этот факт, рекомендуется всегда писать "звездочку" около переменной. Такая привычка позволяет избежать глупых ошибок:
    int *a, *b; // нормально
    int* a, b;  // Ошибка: b кажется указателем, но на самом деле - число.

    А синтаксис у C простой.
    5c77e725c3f4a317612433.jpeg
    Ответ написан
    1 комментарий
  • Зачем ставить фигурные скобки после вызова метода?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Фигурные скобки создают новый блок со своей областью видимости (к последнему выражению это отношения не имеет):
    int A = 0;
    
    {
        int A = 1;
        int B = 1;
        std::cout << A << "\n"; // 1
        std::cout << B << "\n"; // 1
    }
      
    std::cout << A << "\n"; // 0
    //std::cout << B << "\n"; // <-- error: B was not declared in this scope
    Ответ написан
    16 комментариев
  • Как сейчас актуально делать свой почтовый сервер, чтобы доходило до gmail/yandex/mail?

    @CHolfield
    Чтобы доходили письма, нужно:
    1. Настроить DNS. MX- запись, А-запись хоста, в обратной зоне соответствующая PTR-запись.
    2. Купить сертификат для SMTP и прикрутить его к серваку. Имя субъекта в серте должно совпадать с именем хоста DNS.
    3. Пройтись по публичным блек-листам и удалить свой айпишник оттуда, если он там был.
    Ответ написан
  • Как работать с выгоранием?

    @Ksushqa
    Unity developer
    Как же я вас понимаю! Тоже 2+ года и тоже чувствую себя выжатой как лимон. Работа за копейки, нет конца и края меняющимся требованиям. Хотят много, дают в ответ мало, даже хотя бы банального эмоционального отклика (я довольно идейный человек и мне искренняя благодарность очень важна) нет. Ни "спасибо", ничерта... Сделай за себя и за того парня. В итоге пришлось идти в больничку. Обследовалась от и до. Сказали все "болезни" у меня от нервного истощения, тело здорово. Была недавно на больничном, даже отдохнуть не дали нормально. Всё равно пришлось работать. На выходных – часто работаю. Короче, вы понимаете, каково это :) И при этом работать на устаревшем ***, за 2+ года мало роста.

    На этой неделе понесу заявление на увольнение.

    Вина на вас только в том смысле, что вы себя недостаточно любили :) Не отстаивали свои "границы", как любят говорить психологи.

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

    Заранее не всегда возможно. Но вы должны быть внутренне настроены на то, какую работу вы хотите, а что терпеть не будете точно (что аукается на ваше здоровье?). И отстаивать это в общении с работодателем. Я начала отказываться работать на выходных, перестала торопиться всё успеть, потому что начальству захотелось. Перестала соглашаться со всеми заданиями подряд, а если что-то вижу слишком затратным или нецелесообразным – так и говорю с приводом аргументов. А в любую оценку времени на работу теперь нагло прибавляю время на отдых/восстановление (просто потому что привыкла себя загонять и хочу чуть замедлиться, а значит нужно больше времени). Ничего, никто не умер. Едут на том, кто везет :) Не болейте!

    P.s.:
    Ну вот собственно, выгорание случилось, как теперь работать с выгоранием?
    Возьмите направление к неврологу. Если верите в "психологов", можете на консультации походить. Тут дело не только в сложности работы, но и в том, что вы берете всю нагрузку, что на вас взваливают (быть хорошим? вина при отказе?). Двояко.
    Ответ написан
  • Как правильно сделать "git pull для обновления" чтобы получить изменения из одной папки в другую на одном компьютере?

    Stalker_RED
    @Stalker_RED
    Вы не получите простую инструкцию из двух команд. Просто потому, что их для нормальной работы понадобится чуток побольше, чем две. Ближе к десятку.
    В принципе, можно написать несколько sh скриптов, которые будут скрывать в себе все внутренности, но это до первого конфликта.

    Вам в любом случае понадобиться узнать что такое add, commit, pull, push, checkout и merge. А рано или поздно еще и некоторые ключи к ним.

    Книжка вот: https://git-scm.com/book/ru/v2
    Ответ написан