D Lang: std.bitmanip считывает данные в структуру

Запуск программы с '& amp;' не делает программу демонами, она просто работает в фоновом режиме. Для создания «истинного демона» ваша программа должна выполнить шаги, описанные здесь здесь .

Если ваша программа написана на C, вы можете вызвать функцию daemon (), которая сделает это для вы. Тогда вы можете запустить свою программу даже без '& amp;' в конце, и он будет запущен как демон.

Другим вариантом является вызов вашей программы с помощью демона , который также должен выполнять задание.

- name: Start daemon
  shell: daemon -- myexeprogram arg1 arg2

0
задан Michael 13 July 2018 в 19:32
поделиться

1 ответ

Я не совсем понимаю структуру вашего кода - откуда wtf?

Мне кажется, вы неправильно поняли, что передать конструктору MyType - вы вероятно, должен передать ему диапазон и считать это с помощью std.bitmanip.read. Возможно, я неправильно понял ваш код:

import std.range;
import std.bitmanip;

struct MyType {
    uint value;
    this(R)(auto ref R rng) if (isInputRange!R && is(ElementType!R : const(ubyte)))
    {
        auto act = rng.peek!ubyte;
        switch (act) {
            case 0:
                value = rng.read!uint;
                break;
            case 1:
                rng.read!ubyte;
                value = rng.read!uint;
                break;
            // ...
            default: assert(0);
        }
    }
}

unittest {
    ubyte[] buffer = [0x01,0x12,0x34,0x56,0x78];
    auto a = MyType(buffer);
    assert(buffer.length == 0);
    assert(a.value == 0x12345678);
}

Как вы можете видеть, я просто вызываю конструктор MyType с параметром array как параметр, но вы также можете обернуть его в read если вы действительно хотите:

alias read = std.bitmanip.read;
T read(T : MyType, R)(auto ref R range)
if (isInputRange!R && is(ElementType!R : const(ubyte)))
{
    return MyType(range);
}
unittest {
    ubyte[] buffer = [0x01,0x12,0x34,0x56,0x78];
    auto a = buffer.read!MyType;
    assert(buffer.length == 0);
    assert(a.value == 0x12345678);
}
0
ответ дан BioTronic 17 August 2018 в 12:12
поделиться
  • 1
    Удивительно! Это то что мне нужно. Большое вам спасибо за код. – JonMagon 16 July 2018 в 10:14
Другие вопросы по тегам:

Похожие вопросы: