2009-07-22 3 views
1

Привет, при переносе старых Solaris 2.4 код для CentOS 5.3 я наткнулся на вызов, какКак использовать параметр -S xterm (передать псевдотерминальное имя и дескриптор) в Linux?

/usr/bin/xterm -S%s%d ... 

где% s является двухсимвольная последовательность цифр XX, как 00, 01 и% D является числовой дескриптор файла , Это было, по-видимому, способом сказать xterm использовать/dev/ttypXX (псевдотерминал slave), но код, похоже, не беспокоит открытие соответствующего ведущего, вызывающего трубку (2) и передачу записи fd в качестве% d выше. В Solaris запись на эту запись fd из создателя приводит к появлению вывода в xterm-потомке. В strace (1) я не видел попытки открыть что-либо под/dev, кстати.

ответ

1

В соответствии с solaris manpage, системный вызов трубы создает две трубы двунаправленные. Так что на солярисе вы можете использовать как FDS для чтения и записи:

Файлы, связанные с Филдс [0] и Филдс 1 ручьи и оба открыты для чтения и записи.

Однако в соответствии с трубой (2) на Linux станице руководства:

трубы() создает канал, однонаправленный канал передачи данных, который может использоваться для межпроцессного взаимодействия.

Отметим также следующие из трубы (7):

В некоторых системах (но не Linux), трубы являются двунаправленными: данные могут быть переданы в обоих направлениях между концами труб. Согласно POSIX.1-2001, трубы должны быть только однонаправленными. Переносные приложения должны избегать использования семантики двунаправленной трубы.


Так, на Linux вы не можете пройти pipefd 1, конец записи, чтобы XTERM, так как он ожидает, что для FD двунаправленной связи. Чтобы заставить его работать, вам нужно будет использовать openpty() и передать ведомый fd вниз на xterm.

AFAIK, openpty не доступен на Solaris; похоже, причина в том, что ваш код не использует его.

 Смежные вопросы

  • Нет связанных вопросов^_^