Using Pseudo-Terminals to Control Interactive Programs (2010)(rachid.koucha.free.fr)
rachid.koucha.free.fr
Using Pseudo-Terminals to Control Interactive Programs (2010)
http://rachid.koucha.free.fr/tech_corner/pty_pdip.html
10 comments
This is a bit of a tangent, but one issue with the POSIX (and underlying BSD/Linux) APIs is that they don't act nicely with mount namespacing (and thus containers). Since every /dev/pts mountpoint has a different set of ptys associated with it, you need to join a mount namespace in order to operate on /dev/pts/... (and the only way to get a slavefd is to open /dev/pts/$num).
This is of particular concern to container runtimes, so I recently wrote a patch that added a new tty_ioctl(4)[1] to make things _slightly_ better (though I think the pty namespacing concept really needs to be reworked -- not to mention the countless lovely problems with Linux's namespace primitives). Effectively it allows you to safely open a slavefd given a masterfd (without needing to worry about mount namespace issues).
Short story, if you're an author of a container runtime I would take a look at using that feature.
[1]: https://marc.info/?l=linux-kernel&m=149649933504954&w=2
This is of particular concern to container runtimes, so I recently wrote a patch that added a new tty_ioctl(4)[1] to make things _slightly_ better (though I think the pty namespacing concept really needs to be reworked -- not to mention the countless lovely problems with Linux's namespace primitives). Effectively it allows you to safely open a slavefd given a masterfd (without needing to worry about mount namespace issues).
Short story, if you're an author of a container runtime I would take a look at using that feature.
[1]: https://marc.info/?l=linux-kernel&m=149649933504954&w=2
in case not want to install tcl
https://github.com/drudru/pty4
http://empty.sourceforge.net
https://github.com/drudru/pty4
http://empty.sourceforge.net
The problems that are solved by PTYs finally "clicked" for me when I read their example of the problematic fseek/flushing. I hadn't seen such a cogent expiation until now.
True, but be warned, that fseek is not a real example. You cannot fseek/lseek on character devices. You would have to use a different technique.
a less featured expect for some reason
One of Tcl's first "killer apps". Don Libes' (creator of Expect) book "Exploring Expect" is also one of those technical masterpieces that are very enjoyable, entertaining technical reads. Recommended if only for the discussions of terminals and interactive i/o.
[edit: typo/punctuation]