diff options
Diffstat (limited to 'rvnitctl.c')
-rw-r--r-- | rvnitctl.c | 46 |
1 files changed, 46 insertions, 0 deletions
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 <sys/socket.h> +#include <sys/un.h> + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +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; +} |