我尝试通过linux os上的一对伪tty打开网络连接。
# slattach -v /dev/ptmx
cslip started on /dev/ptmx interface sl0
好的,这是伪tty的“创建方”。
我可以查看/ dev / pts并在那里找到新的pty。 如果我现在尝试在这一边使用slattach我得到了:
slattach -v /dev/pts/3
slattach: tty_open(/dev/pts/3, RW): Input/output error
我用strace跟踪:
28 5505 write(1, "slattach: tty_open: trying to op"..., 46) = 46
29 5505 open("/dev/pts/3", O_RDWR|O_NONBLOCK) = -1 EIO (Input/output error)
30 5505 write(2, "slattach: tty_open(/dev/pts/3, R"..., 55) = 55
31 5505 exit_group(3)
所有这些都发生在ubuntu的不同发行版上,在10.04和11.04测试,都失败了。
我做错了什么?
答案 0 :(得分:1)
您可能需要查看手册页pty(7)
。
基本上,/ dev / ptmx使用Unix 98伪终端接口,并要求您的程序使用grantpt(3)和unlockpt(3)。 slattach(打开/ dev / ptmx,而不是另一个)不会这样做,并且任何尝试打开与主服务器关联的从属伪终端的程序都会失败,正如您所经历的那样。
您可以通过使用外部重载open()调用来强制slattach执行grantpt()和unlockpt() 例程,see this example