]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
batched reads for lxc_console
authorMichael Tokarev <mjt@tls.msk.ru>
Tue, 17 Nov 2009 09:56:24 +0000 (10:56 +0100)
committerDaniel Lezcano <dlezcano@fr.ibm.com>
Tue, 17 Nov 2009 09:56:24 +0000 (10:56 +0100)
Instead of doing I/O one-byte-at-a-time in lxc_console,
which is slow, let's do it in batches.  Only for output
(from container to the host system), since input is most
likely one-byte-at-a-time anyway (from a keyboard).

Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
src/lxc/lxc_console.c

index 8bdf6b12f8139ba7b47635b7d4c8063b75b25de2..d6ba7e45ccbcd67c9e6c2172a6a23e725c72c54d 100644 (file)
@@ -141,7 +141,6 @@ int main(int argc, char *argv[])
 
        /* let's proxy the tty */
        for (;;) {
-               char c;
                struct pollfd pfd[2] = {
                        { .fd = 0,
                          .events = POLLIN|POLLPRI,
@@ -161,6 +160,7 @@ int main(int argc, char *argv[])
                /* read the "stdin" and write that to the master
                 */
                if (pfd[0].revents & POLLIN) {
+                       char c;
                        if (read(0, &c, 1) < 0) {
                                SYSERROR("failed to read");
                                goto out_err;
@@ -188,12 +188,14 @@ int main(int argc, char *argv[])
 
                /* read the master and write to "stdout" */
                if (pfd[1].revents & POLLIN) {
-                       if (read(master, &c, 1) < 0) {
+                       char buf[1024];
+                       int r;
+                       r = read(master, buf, sizeof(buf));
+                       if (r < 0) {
                                SYSERROR("failed to read");
                                goto out_err;
                        }
-                       printf("%c", c);
-                       fflush(stdout);
+                       write(1, buf, r);
                }
        }
 out: