sockread: add support for reading data from a pipe 774/head
authorMoritz Warning <moritzwarning@web.de>
Sun, 18 Jan 2015 01:01:14 +0000 (02:01 +0100)
committerMoritz Warning <moritzwarning@web.de>
Tue, 20 Jan 2015 12:43:59 +0000 (13:43 +0100)
utils/sockread/Makefile
utils/sockread/src/main.c

index 78beee2483cb40d2cf87c8961beca23aba3e6ca1..d3c15d468a0079acffd6b73505dabf4898d19ad1 100644 (file)
@@ -18,7 +18,7 @@ define Package/sockread
 endef
 
 define Package/sockread/description
-       sockread reads data from a Unix domain socket
+       sockread writes and reads data from a Unix domain socket
        represented as a special file on the file system.
 endef
 
index 3343f2a456dfd44d67d54bf1a09bc5e6bf1d4eb1..06c21def4dbcb7234fa72f35fb118cbb410db2cd 100644 (file)
@@ -3,15 +3,16 @@
 #include <stdlib.h>
 #include <errno.h>
 #include <stddef.h>
-#include <stdio.h>
-#include <string.h>
+#include <unistd.h>
 #include <sys/socket.h>
 #include <sys/un.h>
 
-
 int main(int argc, char *argv[]) {
+       char buf[1024];
+       ssize_t r;
+
        if (argc != 2) {
-               fprintf(stderr, "Usage: %s <socket>\n", argv[0]);
+               fprintf(stderr, "Write to and read from a Unix domain socket.\n\nUsage: %s <socket>\n", argv[0]);
                return 1;
        }
 
@@ -36,8 +37,15 @@ int main(int argc, char *argv[]) {
                return 1;
        }
 
-       char buf[1024];
-       ssize_t r;
+       /* Check if stdin refers to a terminal */
+       if (!isatty(fileno(stdin))) {
+               /* Read from stdin and write to socket */
+               while (0 < (r = fread(buf, 1, sizeof(buf), stdin))) {
+                       send(fd, buf, r, 0);
+               }
+       }
+
+       /* Read from socket and write to stdout */
        while (1) {
                r = recv(fd, buf, sizeof(buf), 0);
                if (r < 0) {