Ответы пользователя по тегу Конвейер
  • Как в конвейерном 32bit процессоре передается команды записи в Reg 32 Битного значения??

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    А как передать-то 32 битное значение в команде в 32 бит?
    Логично что после команды значение(или адрес). Но тогда же получается какое-то нарушение логики.

    В RISC-процессорах -- никак. Они либо имеют команду загрузки 32-битного значения (литерала) из памяти относительно PC или специально выделенного регистра (например ARM: LDR r [pc, #offset_to_literal_pool], XTENSA: l32r at, label), при этом в команде кодируется смещение адреса литерала относительно PC. Либо загружают значения по частям, двумя или более командами (например MIPS загружает 16-битные части двумя разными инструкциями: lui rt, high16 ; ori rt, low16, XTENSA загружает 16-битные части двумя одинаковыми инструкциями: CONST16 at, high16 ; CONST16 at, low16, RISC-V загружает 20 и 12-битные части: auipc rd, symbol[31:12] ;addi rd, rd, symbol[11:0]).
    Хотя в принципе тот же RISC-V имеет нефиксированную длину команд, так, что какой-нибудь разработчик может завести, скажем, 6-байтовую команду загрузки 32-битного непосредственного значения в регистр, однако, насколько мне известно, никто этого не делает.
    Ответ написан
    Комментировать
  • Как заставить wget качать из конвейера?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    curl -s 'https://api.adoptopenjdk.net/v2/latestAssets/releases/openjdk11?openjdk_impl=hotspot&os=linux&arch=x64&release=latest&heap_size=normal&type=jdk' | \
    jq -r '.[0].checksum_link' | xargs wget
    Ответ написан
    Комментировать
  • Именованный каналы (FIFO) - C++ библиотеки?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    для работы с именованными пайпами (named pipe or FIFO)

    Под windows и под POSIX это две сильно разные штуки.
    Ответ написан
  • Эмуляция пользовательского ввода и считывание вывода из программы (pipe, C++)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    #include <unistd.h>
    
    int main()
    {
            int fd[2][2];
            pipe(fd[0]);
            pipe(fd[1]);
            pid_t pid_fork = fork();
            if (!pid_fork) {
                    // Дочерний процесс
                    close(fd[0][1]);
                    close(fd[1][0]);
                    dup2(fd[0][0], STDIN_FILENO);
                    dup2(fd[1][1], STDOUT_FILENO);
                    execl("/bin/tr", "/bin/tr", "l", "r", NULL);
            } else {
                    // Родительский процесс
                    close(fd[0][0]);
                    close(fd[1][1]);
                    char buf[1000];
                    ssize_t sz;
    
                    write(fd[0][1], "hello, world\n", sizeof("hello, world\n") - 1);
                    close(fd[0][1]);
                    sz = read(fd[1][0], buf, sizeof(buf));
                    if (sz > 0) {
                            write(STDOUT_FILENO, buf, sz);
                    }
            }
    }
    Ответ написан
    2 комментария
  • Bash. Как сделать перенаправление stderr и stdout в один файл, а stderr в другой?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    (( echo stderr >&2 ; echo stdout ) 3>&2- 2>&1- 1>&3- | tee stderr ) 2>&1 | tee stdout+stderr

    Внутренняя скобка генерирует вывод в stdout и stderr, дальше во внешней скобке stdout и stderr меняются местами, новый stdout записывается в файл с ошибками и обратно в stdout, дальше вне скобок stdout и stderr объединяются и записываются в общий файл.
    Ответ написан
    Комментировать
  • Перенаправление STDERR и STDOUT в разные скрипты на STDIN?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Только через внешний fifo, например так:

    D=`mktemp -d` ; mkfifo "$D/stdout" ; mkfifo "$D/stderr" ; cmd_stdout < "$D/stdout" & cmd_stderr < "$D/stderr" & cmd > "$D/stderr" 2>"$D/stdout" & wait ; rm -rf "$D"
    
    Ответ написан
    Комментировать