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[])
/* 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:
......
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