Commit 92db2bb0 by Michael Tokarev Committed by Daniel Lezcano

batched reads for lxc_console

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: 's avatarMichael Tokarev <mjt@tls.msk.ru> Signed-off-by: 's avatarDaniel Lezcano <dlezcano@fr.ibm.com>
parent 994f905e
...@@ -141,7 +141,6 @@ int main(int argc, char *argv[]) ...@@ -141,7 +141,6 @@ int main(int argc, char *argv[])
/* let's proxy the tty */ /* let's proxy the tty */
for (;;) { for (;;) {
char c;
struct pollfd pfd[2] = { struct pollfd pfd[2] = {
{ .fd = 0, { .fd = 0,
.events = POLLIN|POLLPRI, .events = POLLIN|POLLPRI,
...@@ -161,6 +160,7 @@ int main(int argc, char *argv[]) ...@@ -161,6 +160,7 @@ int main(int argc, char *argv[])
/* read the "stdin" and write that to the master /* read the "stdin" and write that to the master
*/ */
if (pfd[0].revents & POLLIN) { if (pfd[0].revents & POLLIN) {
char c;
if (read(0, &c, 1) < 0) { if (read(0, &c, 1) < 0) {
SYSERROR("failed to read"); SYSERROR("failed to read");
goto out_err; goto out_err;
...@@ -188,12 +188,14 @@ int main(int argc, char *argv[]) ...@@ -188,12 +188,14 @@ int main(int argc, char *argv[])
/* read the master and write to "stdout" */ /* read the master and write to "stdout" */
if (pfd[1].revents & POLLIN) { 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"); SYSERROR("failed to read");
goto out_err; goto out_err;
} }
printf("%c", c); write(1, buf, r);
fflush(stdout);
} }
} }
out: out:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment