From 5e745434fc03fe7dfca347b4dd7a469800900602 Mon Sep 17 00:00:00 2001 From: Mark Date: Tue, 7 Jul 2020 21:27:15 +0300 Subject: [PATCH] Add ucat --- .gitignore | 1 + etc/inittab | 3 +++ progs/base/bin/ucat.c | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 etc/inittab create mode 100644 progs/base/bin/ucat.c diff --git a/.gitignore b/.gitignore index bf6dcb5..20bfbf6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ kernel-hdr build progs/rsh +progs/rc diff --git a/etc/inittab b/etc/inittab new file mode 100644 index 0000000..90659da --- /dev/null +++ b/etc/inittab @@ -0,0 +1,3 @@ +# Runlevels: 1 + +l0:1:once:/bin/login diff --git a/progs/base/bin/ucat.c b/progs/base/bin/ucat.c new file mode 100644 index 0000000..aaef2c0 --- /dev/null +++ b/progs/base/bin/ucat.c @@ -0,0 +1,38 @@ +#include +#include +#include +#include +#include + +int main(int argc, char **argv) { + struct sockaddr_un un; + ssize_t rd; + int fd; + char buf[1024]; + + if (argc != 2) { + fprintf(stderr, "usage: %s SOCKET\n", argv[0]); + return -1; + } + + un.sun_family = AF_UNIX; + strcpy(un.sun_path, argv[1]); + + if ((fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) { + perror("socket()"); + return -1; + } + + if (connect(fd, (struct sockaddr *) &un, sizeof(un)) != 0) { + perror("connect()"); + return -1; + } + + while ((rd = recv(fd, buf, sizeof(buf), 0)) > 0) { + write(STDOUT_FILENO, buf, rd); + } + + close(fd); + + return 0; +}