Как получить текущее терминальное имя?

С точки зрения устойчивости я не нашел различие между Centos и Debian (стабильным). У меня есть машины, выполняющие Debian, Сжимают, Centos 5.8, Centos 6.2 и Slackware. Используйте Centos, если существует определенная часть программного обеспечения, которое недоступно Debian, иначе я придерживался бы Debian. Так как устойчивость является вопросом, который я засунул бы далеко от Sid.

17
21.05.2018, 01:04
3 ответа
tty

Теперь я должен ввести 30 символов, где 3 был бы достаточно... :-)

26
27.01.2020, 19:47
  • 1
    apropos tty возможно, было поучительно, также (-: –  tripleee 31.05.2013, 19:28
  • 2
    @tripleee, Если Вы знаете результат, получая его обычно, кажется легким. Но это было действительно твердым. Я должен upvote вопрос для удара его выше 125 границ точек представителя, таким образом, он может предложить заслуженную щедрость для моего большого усилия... –  Hauke Laging 31.05.2013, 19:37
  • 3
    Ваш ответ получил меня задающийся вопросом где tty получает название ИМУЩЕСТВА или TTY. Я работал strace -o spork tty чтобы узнать, что это делает readlink на/proc файле: readlink("/proc/self/fd/0", "/dev/pts/5"..., 4095) = 10 Замечательно, что/proc может использоваться, чтобы сделать такие изящные вещи, но что сделало более ранний Unixes без гибкой/proc файловой системы, сделайте для получения имени tty? –  Bruce Ediger 31.05.2013, 19:39
  • 4
    Вы могли просто объяснить, какой та команда, что она делает и что еще можно сделать с нею и whoooosh, это был бы лучший ответ. –  Bobby 31.05.2013, 19:58
  • 5
    @Bobby Каждый ответ может быть сделан лучше. Корреспондент решил свою проблему после двух минут; не настолько плохо, по моему скромному мнению. Серьезно, я понятия не имею, с чем еще можно сделать tty. То, что это делает, точно, о чем вопрос. Я даже не получаю различие между, "что та команда" и, "что это делает". Что такое команда? Но, эй, я не хочу upvotes ни для чего. Если Вы запишете ясно лучший ответ (который мой, возможно, предотвратил), затем, то я дам 50 щедрости представителя для того (как только это возможно т.е. за два дня). –  Hauke Laging 31.05.2013, 20:07

Подключить модем OpenWRT к маршрутизатору Интернета с помощью кабеля? Насколько я знаю, когда вы переводите свой интерфейс в режим AP, вы не можете использовать его для доступа к Интернету одновременно.

-121--145618-

sudo apt-get install linux-firmware-non free или вы можете использовать apt-cache search realtek , чтобы узнать, есть ли определенные драйверы для вашего оборудования.

-121--87485-

Ре: "Вы могли бы просто объяснить, что эта команда, есть, что она делает и что еще вы можете сделать с ней и whoosh, это было бы лучшим ответом. - Bobby "

Имя Unix текущего терминала (или консоли, как мы ранее использовали, чтобы иногда также называть его): / dev/tty, который, можно использовать для простого создания нового многострочного файла из командной строки: cp/dev/tty README.md (попадание затем ставит курсор на новую пустую строку, где можно ввести текст, нажать return еще раз, ввести вторую строку и так далее. По завершении ввода строк выполните команду control-d, которая приводит к выходу команды cp, и вы создадите многострочный файл с одной командой).

3
27.01.2020, 19:47

Re :«Вы могли бы просто объяснить, что это за команда, что она делает и что еще вы можете с ней делать, и уууух, это был бы лучший ответ. — Бобби»

ИЛИ мы действительно можем сойти с ума и сказать: «идите и посмотрите на исходный код для получения дополнительной информации». Так я и сделал.

Чтобы действительно получить имя в tty.c, вспомогательная функцияttynameвызывается в STDIN_FILENO. Оба они определены вunistd.h(для доказательства, запустите grep "STDIN_FILENO\|ttyname" /usr/include/unistd.h), который втягивается в tty.cчерез #include "system.h"(, перейдите здесь , чтобы увидетьsystem.h).

Теперь ttynameявляется внешней зависимостью, определенной вglib_c/sysdeps/posix/ttyname.c. Он, в свою очередь, использует fstatsфайловый дескрипторSTDIN_FILENO(0)и использует функциюgettynameдля получения указателя на имя tty. fstatприводит кINLINE_SYSCALLв fxstat.c, что в конечном итоге вызывает internal_syscall2, и в этот момент мне не повезло. Я действительно не знаю, что это делает.

Но я считаю, что он вызывает функциональность statна fd 0. Все это он делает, стараясь не останавливаться на «stdin» или чем-то подобном. В любом случае, вы можете добиться такого же поведения, взглянув на

stat /dev/stdin # -> /proc/self/fd/0
stat /proc/self/fd/0 # -> /dev/pts/<some number>

Тогда /dev/pts/<some number>ваш tty.

Обновление

Я пытаюсь докопаться до сути, но не буду так подробно, как выше. До сих пор я пришел к выводу, что косвенность syscallзаканчивается функцией с именем vfs_fstat, которая затем вызывает функцию fdget_raw, которая немедленно вызывает __fget_light. Здесь используется макрос current, который возвращает результат get_current, определенный здесь :

.
static __always_inline struct task_struct *get_current(void)
{                                                           
    return this_cpu_read_stable(current_task);              
}                                                           

В любом случае, в task_structесть запись filesтипа files_struct, которая, как я полагаю, сохраняет список filesактуальным для текущей задачи.Это массив, а fd— индекс в массиве. Чтобы завершить все это, нам просто нужно выяснить, что на самом деле означает fd 0по отношению к этому массиву (, т.е. когда создается задача, что на самом деле туда помещается ). Затем нам просто нужно посмотреть в источнике, если /proc/selfточно отражает этот массив, тогда мы можем быть уверены, что то, что мы думаем, происходит на самом деле...

1
04.11.2020, 15:24

Теги

Похожие вопросы