From 6607f16375b26b588c148e0b5bfd61bc37696a7e Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Fri, 7 Jan 2022 00:44:55 +0100 Subject: add rvnitctl --- Makefile | 2 +- rvnitctl.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 rvnitctl.c diff --git a/Makefile b/Makefile index aeae237..a45e672 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ CFLAGS=-g -O2 -Wall -Wno-switch -Wextra -Wwrite-strings -Wno-format-truncation -pthread -ALL=rvnit +ALL=rvnit rvnitctl all: $(ALL) diff --git a/rvnitctl.c b/rvnitctl.c new file mode 100644 index 0000000..1f3977c --- /dev/null +++ b/rvnitctl.c @@ -0,0 +1,46 @@ +#include +#include + +#include +#include +#include + +int +main(int argc, char *argv[]) +{ + if (argc < 2) { + dprintf(2, "usage: rvnitctl COMMAND [SERVICE]\n"); + exit(2); + } + + const char *path = "/tmp/rvnit.sock"; + + struct sockaddr_un addr = { 0 }; + addr.sun_family = AF_UNIX; + strncpy(addr.sun_path, path, sizeof addr.sun_path - 1); + int connfd = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0); + if (connfd < 0) { + perror("socket"); + exit(111); + } + + if (connect(connfd, (struct sockaddr *)&addr, sizeof addr) < 0) { + perror("connect"); + exit(111); + } + + dprintf(connfd, "%c%s", *argv[1], argv[2] ? argv[2] : ""); + + ssize_t rd; + do { + char buf[4096]; + rd = read(connfd, buf, sizeof buf); + if (rd < 0) { + perror("read"); + exit(111); + } + write(1, buf, rd); + } while (rd > 0); + + return 0; +} -- cgit 1.4.1