sd_journal_sendv 写入 BLOB 而不是字符串
sd_journal_sendv writing BLOB instead of string
有人可以解释一下如何使用 sd_journal_sendv 系统调用吗?
我尝试使用以下代码片段,但输入字符串被 journald 解释为 BLOB。
#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]
您没有在 .iov_len
中传递字段的大小。这会导致 50 字节的缓冲区在末尾包含垃圾。 journalctl
将这些显示为 blob 数据,因为它是无效的 UTF-8。
有人可以解释一下如何使用 sd_journal_sendv 系统调用吗? 我尝试使用以下代码片段,但输入字符串被 journald 解释为 BLOB。
#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]
您没有在 .iov_len
中传递字段的大小。这会导致 50 字节的缓冲区在末尾包含垃圾。 journalctl
将这些显示为 blob 数据,因为它是无效的 UTF-8。