работает slattach на псевдо tty - PullRequest
       15

работает slattach на псевдо tty

2 голосов
/ 20 сентября 2011

Я пытаюсь открыть сетевое соединение через пару псевдотерминалов на ОС Linux.

# slattach -v /dev/ptmx
cslip started on /dev/ptmx interface sl0

ОК, это была «сторона создания» для псевдотерминала.

Iможете посмотреть в / 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, оба терпят неудачу.

Что я делаю не так?

1 Ответ

1 голос
/ 29 декабря 2011

Возможно, вы захотите взглянуть на справочную страницу pty(7).

По сути, / dev / ptmx использует псевдо-терминальный интерфейс Unix 98 и требует, чтобы ваша программа использовала grantpt (3) и unlockpt (3). Здесь slattach (тот, который открывает / dev / ptmx, а не другой) этого не делает, и любая программа, которая пытается открыть подчиненный псевдо-терминал, связанный с мастером, потерпит неудачу, как вам показалось.

Вы можете заставить slattach выполнять grantpt () и unlockpt (), перегружая вызов open () внешним рутина, см. этот пример

...