sd_journal_sendv пишет BLOB вместо строки

Может кто-нибудь объяснить мне, как использовать системный вызов sd_journal_sendv? Я попытался использовать приведенный ниже фрагмент кода, но входные строки интерпретируются как BLOB по journald.

#include <iostream>
#include <iostream>
#include <sys/uio.h>
#include <errno.h>
#include <stdlib.h>
#include <systemd/sd-journal.h>
using namespace std;
int main() {
    char buf0[50];
    char buf1[50];
    char buf2[50];
    int iovcnt;
    struct iovec iov[3];
    strcpy(buf0,"MESSAGE=Hello World!");
    strcpy(buf1,"MESSAGE_ID=52fb62f99e2c4");
    strcpy(buf2,"PRIORITY=5");
    iov[0].iov_base = buf0;
    iov[0].iov_len = sizeof(buf0);
    iov[1].iov_base = buf1;
    iov[1].iov_len = sizeof(buf1);
    iov[2].iov_base = buf2;
    iov[2].iov_len = sizeof(buf2);
    iovcnt = sizeof(iov) / sizeof(struct iovec);
    int ret = sd_journal_sendv (iov, iovcnt);
    if ret(!=0)
        cout<<"sendv "<<strerror(ret)<<endl;
    return 0;
}

Я написал "Hello world!", 52fb62f99e2c4, 5 для MESSAGE, MESSAGE_ID и PRIORITY соответственно. но в журнале я вижу, что они написаны как BLOB.

MESSAGE=[92B blob data]
MESSAGE_ID=[89B blob data]
PRIORITY=[91B blob data]

1 ответ

Вы не передаете размеры ваших полей в .iov_len, Это приводит к тому, что 50-байтовые буферы в конце содержат мусор. journalctl показывает их как данные BLOB, потому что это недопустимый UTF-8.

Другие вопросы по тегам