#include "unistd.h"
#include "fcntl.h"
#include "stdlib.h"
#include "sys/select.h"
#include "stdio.h"
int main() {
int master_fd = posix_openpt(O_RDWR | O_NOCTTY | O_NONBLOCK);
char* slave_name = ptsname(master_fd);
unlockpt(master_fd);
grantpt(master_fd);
printf("master_fd = %d, slave = %s\n", master_fd
, slave_name
);
// If omitted, select will start returning immediately without setting master_fd in fds after a client opens and closes slave ttys once
int slave_fd = open(slave_name, O_RDONLY);
fd_set fds;
FD_ZERO(&fds);
while (1) {
FD_SET(master_fd, &fds);
int ret = select(master_fd+1, &fds, NULL, NULL, NULL);
printf("select ret = %d ", ret
); if (FD_ISSET(master_fd, &fds)) {
char c = 0;
int r = read(master_fd, &c, 1);
printf("r = %d, c = '%c'\n", r
, c
); write(master_fd, &c, 1);
} else {
printf("master_fd is not set in fds\n"); }
}
return 0;
}
I2luY2x1ZGUgInVuaXN0ZC5oIgojaW5jbHVkZSAiZmNudGwuaCIKI2luY2x1ZGUgInN0ZGxpYi5oIgojaW5jbHVkZSAic3lzL3NlbGVjdC5oIgojaW5jbHVkZSAic3RkaW8uaCIKCmludCBtYWluKCkgewoJaW50IG1hc3Rlcl9mZCA9IHBvc2l4X29wZW5wdChPX1JEV1IgfCBPX05PQ1RUWSB8IE9fTk9OQkxPQ0spOwoJY2hhciogc2xhdmVfbmFtZSA9IHB0c25hbWUobWFzdGVyX2ZkKTsKCXVubG9ja3B0KG1hc3Rlcl9mZCk7CglncmFudHB0KG1hc3Rlcl9mZCk7CglwcmludGYoIm1hc3Rlcl9mZCA9ICVkLCBzbGF2ZSA9ICVzXG4iLCBtYXN0ZXJfZmQsIHNsYXZlX25hbWUpOwoKCS8vIElmIG9taXR0ZWQsIHNlbGVjdCB3aWxsIHN0YXJ0IHJldHVybmluZyBpbW1lZGlhdGVseSB3aXRob3V0IHNldHRpbmcgbWFzdGVyX2ZkIGluIGZkcyBhZnRlciBhIGNsaWVudCBvcGVucyBhbmQgY2xvc2VzIHNsYXZlIHR0eXMgb25jZQoJaW50IHNsYXZlX2ZkID0gb3BlbihzbGF2ZV9uYW1lLCBPX1JET05MWSk7CgoJZmRfc2V0IGZkczsKCUZEX1pFUk8oJmZkcyk7CgoJd2hpbGUgKDEpIHsKCQlGRF9TRVQobWFzdGVyX2ZkLCAmZmRzKTsKCgkJaW50IHJldCA9IHNlbGVjdChtYXN0ZXJfZmQrMSwgJmZkcywgTlVMTCwgTlVMTCwgTlVMTCk7CgkJcHJpbnRmKCJzZWxlY3QgcmV0ID0gJWQgIiwgcmV0KTsKCQlpZiAoRkRfSVNTRVQobWFzdGVyX2ZkLCAmZmRzKSkgewoJCQljaGFyIGMgPSAwOwoJCQlpbnQgciA9IHJlYWQobWFzdGVyX2ZkLCAmYywgMSk7CgkJCXByaW50ZigiciA9ICVkLCBjID0gJyVjJ1xuIiwgciwgYyk7CgkJCXdyaXRlKG1hc3Rlcl9mZCwgJmMsIDEpOwoJCX0gZWxzZSB7CgkJCXByaW50ZigibWFzdGVyX2ZkIGlzIG5vdCBzZXQgaW4gZmRzXG4iKTsKCQl9Cgl9CgoJcmV0dXJuIDA7Cn0=