• Как скриптом в Linux синхронизировать время с указанием своего Часового пояса?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как скриптом в Linux синхронизировать время с указанием своего Часового пояса?

    Никак же, внутреннее время в Linux -- всегда в UTC. Для синхронизации часов TZ не нужна.
    TZ -- это обычная переменная окружения, влияет она только на С-функции работающие с датой/временем и на одной машине разные сессии вполне могут иметь разные настройки TZ.
    Установить её для ash можно в /etc/profile или ~/.profile.
    Ответ написан
    5 комментариев
  • Почему переменная раскрывается с кавычками либо пытается сразу передать файлы?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    она ничего не находит, так как вторая переменная раскрывается с одинарными кавычками '.pdf'

    А у меня всё что надо находит твоим скриптом. Можешь добавить -x к #!/bin/bash чтобы шелл писал, что собирается выполнять, чтобы понять в чём дело. Подозреваю, что какие-нибудь смешные опции в .bashrc/.bash_profile
    Ответ написан
  • Почему у PostgreSQL и MySQL точность даты только до микросекунд?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что мешает MSSQL поддерживать точность даты до наносекунд

    То что в винде все встроенные таймстемпы имеют точность 100нс. Потому что формат данных FILETIME -- это целое число сотен наносекунд прошедших с начала 1601 года.
    Ответ написан
    1 комментарий
  • Почему не работает ALT-CTRL-Fx?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Захожу в консоль по SSH через Putty. Хочу переключиться к примеру на TTY2. Нажимаю CTRL+ALT+F2, но в консоли только [12~
    Что я делаю не так?

    ctrl-alt-f2 -- это сочетание клавиш для драйвера виртуального терминала. Соответственно, оно работает только при вводе через виртуальный терминал.

    Под простым юзером ввожу chvt 2:
    Если под рутом, то команда выполняется и всё
    Что я делаю не так?

    В графической консоли вводишь? С помощью strace легко понять что происходит:
    от простого юзера:
    $ strace -iv chvt 2
    ...
    [00007f96b99d56f0] open("/proc/self/fd/0", O_RDWR) = 3
    [00007f96b99da80a] ioctl(3, TCGETS, {c_iflags=0x5500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    [00007f96b99db017] ioctl(3, KDGKBTYPE, 0x7fff06db6d67) = -1 ENOTTY (Inappropriate ioctl for device)
    [00007f96b99d5f30] close(3)             = 0
    [00007f96b99d56f0] open("/dev/tty", O_RDWR) = 3
    [00007f96b99da80a] ioctl(3, TCGETS, {c_iflags=0x5500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    [00007f96b99db017] ioctl(3, KDGKBTYPE, 0x7fff06db6d67) = -1 ENOTTY (Inappropriate ioctl for device)
    [00007f96b99d5f30] close(3)             = 0
    [00007f96b99d56f0] open("/dev/tty0", O_RDWR) = -1 EACCES (Permission denied)
    ...

    Т..е. stdin и /dev/tty не поддерживают ioctl переключающий терминал (вернее, до него даже не доходит), потому что твоя консоль -- это псевдотерминал, а открыть /dev/tty0 не хватает привилегий.
    А от рута:
    $ sudo strace chvt 2
    ...
    [00007f591848c6f0] open("/proc/self/fd/0", O_RDWR) = 3
    [00007f591849180a] ioctl(3, TCGETS, {c_iflags=0x5500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    [00007f5918492017] ioctl(3, KDGKBTYPE, 0x7fffe5e72d17) = -1 ENOTTY (Inappropriate ioctl for device)
    [00007f591848cf30] close(3)             = 0
    [00007f591848c6f0] open("/dev/tty", O_RDWR) = 3
    [00007f591849180a] ioctl(3, TCGETS, {c_iflags=0x5500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    [00007f5918492017] ioctl(3, KDGKBTYPE, 0x7fffe5e72d17) = -1 ENOTTY (Inappropriate ioctl for device)
    [00007f591848cf30] close(3)             = 0
    [00007f591848c6f0] open("/dev/tty0", O_RDWR) = 3
    [00007f591849180a] ioctl(3, TCGETS, {c_iflags=0x5, c_oflags=0, c_cflags=0xbf, c_lflags=0, c_line=0, c_cc[VMIN]=1, c_cc[VTIME]=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    [00007f5918492017] ioctl(3, KDGKBTYPE, 0x7fffe5e72d17) = 0
    [00007f5918492017] ioctl(3, VT_ACTIVATE, 0x2) = 0
    [00007f5918492017] ioctl(3, VT_WAITACTIVE, 0x2) = 0
    ...

    Т.е. stdin и /dev/tty -- то же самое, но /dev/tty0 открывается и ioctl VT_ACTIVATE проходит.
    Ответ написан
    Комментировать
  • Как сделать чтобы функция изменяла переменную?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    void AddMusic(std::vector<Type> *src, std::vector<Type> *dst, float &currentlength, float maxlength)
    Ответ написан
    3 комментария
  • Как низкоуровневый код использующий стек узнает откуда он начинается?

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

    Если мы говорим про обычные (не PIE) исполняемые ELF-файлы, то они слинкованы под конкретный адрес куда они будут загружены, и все адреса внутри одного исполняемого файла посчитаны заранее. Поэтому загрузка адреса функции или пременной в секции данных -- это просто загрузка константы в регистр.

    и кучи

    С кучей всё по-другому, потому что куча и объекты в ней полностью динамические. Выделение памяти для кучи -- это всегда системный вызов, который возвращает адрес выделенной памяти (и sbrk, и mmap).

    не ясно, как становится известен адрес стека и аргументов командной строки

    они инициализируются ядром ОС, согласно ABI, см. например, ABI x86_64, раздел 3.4.1.
    Ответ написан
    Комментировать
  • Как число с плавающей точкой преобразовать в half float в 16 формат?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как можно уместить 1.7754 в 3f 1a?

    0x3f 0x1a -- это знак == 0, порядок == 0xf, мантисса == 0x31a. Нормализованное значение мантиссы == 1 + 0x31a / 1024 = 1.7754. Порядок 0xf после вычитания bias == 15 превращается в 0, что соответствует множителю 1. Всё.

    Как число с плавающей точкой преобразовать в half float в 16 формат

    Примерно так:
    0) обработать специальные случаи (например 0 представляется как 0).
    1) взять модуль, запомнить знак исходного числа.
    2) нормализовать, т.е выделить множитель вида 2^N, чтобы осталась нормализованная мантисса в диапазоне [1, 2). К N прибавить 15 -- это значение порядка.
    3) отнять 1 от нормализованной мантиссы, результат умножить на 1024 -- это значение мантиссы float16.
    4) сдвинуть значение порядка влево на 10, сделать побитовое или с мантиссой float16, установить старший бит, если число было отрицательным.

    Для -3.4805 получаем:
    3.4805 = 2^1 * 1.7402 ; N = 1, M = 1024 * 0.7402 = 0x2f6 ;
    0x8000 | ((1 + 15) << 10) | 0x2f6 = 0x8000 | 0x4000 | 0x2f6 = 0xc2f6
    Ответ написан
    1 комментарий
  • Как отсортировать элементы структуры?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В чем ошибка?

    if (miderate[i] > miderate[i + 1]) {
            swap (records[i].name, records[i + 1].name);
            swap (records[i].group, records[i + 1].group);
            swap(records[i].marks, records[i + 1].marks);
          }

    В том что ты сравниваешь средние оценки, но не переставляешь их.

    И к тому же, можно писать просто swap(records[i], records[i + 1]).
    И к тому же, можно сортировать с помощью std::sort
    Ответ написан
    3 комментария
  • Как найти и заменить текст на удаленном компьютере, Mac OS Mojave?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    sed -i

    -i не описана в POSIX, а значит может работать по-разному в разных системах.

    sed -i.random-backup-tag 's/OldText/NewText/g' должно помочь. Потом бэкапы удалишь командой
    find  Users/Desktop/Documents \
        -type d -name .git -prune -o 
        -type f -name '*.random-backup-tag' -print0 | \
        xargs -0 rm -f
    Ответ написан
    1 комментарий
  • Как реализовать асинхронный прием сокетов в C#?

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

    После того как соединение установлено сокеты на его концах абсолютно равноправны. Нет различия между клиентом и сервером. Делай сервер так, как делал бы клиента. Простейший вариант -- рождать отдельный поток для каждого соединения и делать в нём всё синхронно.
    Ответ написан
    Комментировать
  • Как строка Сишного кода будет выглядеть на c++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Так как str это string, то не могу использовать sscanf_s.

    Можешь: sscanf_s(str.c_str(), "%i %i", &inkey, &ininf);
    Ответ написан
    Комментировать
  • Что нужно исправить в этом коде, чтобы из глаз не шла кровь?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что тут можно улучшить?

    std::string::insert вместо побуквенного перекладывания.
    newStr[i]+1 не работает для 'Я'->'А' и вообще сильно от кодировки зависит.
    Ответ написан
    Комментировать
  • Как вывести список файлов командой FIND?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    $find /var/www/test -type f ! -regex ".*\(edit\|200x200\).*" -name "*.jpg" -o -name "*.png"

    Операции в строке условий find имеют приоритеты, приоритет "или" ниже чем приоритет "и". У вас получилось "(тип -- файл, и не *edit* или *200x200*, и *.jpg) или *.png".

    Как быть?

    Добавить скобок:
    find /var/www/test -type f ! -regex ".*\(edit\|200x200\).*" \( -name "*.jpg" -o -name "*.png" \)


    Если не использовать регулярное выражение, то работает:
    $find /var/www/test -type f ! -name "*.jpg" -o -name "*.png"

    ...но совсем не так, как должно.
    Ответ написан
    Комментировать
  • Как перевести этот код с C++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как перевести этот код с C++?

    И, главное, зачем? И чем для этой цели не подошёл компилятор С++?

    mov ebx, [ebp - 8]

    Нифига не mov, должно быть lea ebx, [ebp - 8]

    lea edx, [ebx + ecx + 4] ; add FirstThunk RVA to base. Offset &function is 4

    Нифига +4 не нужно. Смещение &function == 0.

    lea edx, [edx + 20] ;size of IMAGE_THUNK_DATA

    Нифига не +20, размер этой структуры -- 4.
    Ответ написан
    3 комментария
  • Как называется алгоритм??

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как называется алгоритм??

    Быстрое возведение a в степень b. По модулю m.
    Ответ написан
    Комментировать
  • Как сравнить два числа в коде Грея?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Смысл младших битов кода Грея зависит от значения старших битов, поэтому вряд ли можно избежать перевода значения из кода Грея в обычный двоичный. Если битность кода фиксированная и небольшая, скорее всего оптимальный вариант -- перевести в двоичный код и сравнить. Если битность большая или переменная, то можно переводить и одновременно сравнивать уже переведённые биты и останавливаться на первом неравенстве. См.
    Ответ написан
  • Как реализовать кроссконсольную раскраску вывода?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть ли простой способ как-то определить поддержку

    tput colors
    Ответ написан
  • Как создать указатель на функцию main?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    int main(void)
    {
        int (*pmain)(void) = main;
    }


    например int* func;

    Это указатель на int, а не на функцию.
    Ответ написан
    Комментировать
  • SSH id_rsa.pub не работает с одним ip адресом а с другим работает, что может быть проблемой?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    id_rsa.pub не работает с одним ip адресом

    id_rsa.pub -- это текстовый файл. Он не может работать или не работать. У тебя не работает что-то другое. Постарайся понятно написать, что ты делаешь и что не работает.
    Ответ написан
  • Почему код именно так работает?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Символы повторяются из-за static?

    Не из-за static, а из-за того, что _itoa всегда возвращает один и тот же адрес. Попробуй так, зацени разницу:
    char *_itoa(int i) {
      static int slot;
      static char buf[10][2];
      slot = (slot + 1) % 10;
      buf[slot][0] = i + '0';
      buf[slot][1] = '\0';
      return buf[slot];
    }
    
    int main() {
    
      printf("%s + %s = %s", _itoa(2), _itoa(2), itoa(4));
      _getch();
    }
    Ответ написан
    Комментировать