Я хотел бы создать символьное устройство, которое имеет те же свойства, что и стандартный псевдотерминал, но может иметь конкретное имя.
По сути, я бы хотел иметь / dev / pts / my-unique-name вместо чисел, которые можно использовать повторно. Есть ли способ сделать это? Жестяная банка mknod
например создать произвольно подключенные char-устройства?
То, что вы просите, по сути, является вариантом использования Псевдотерминалы BSD. Драйвер псевдотерминального устройства BSD имел 256 пар номеров inode (каждая пара состояла из ведущего и ведомого), и соответствующие inode были созданы в / dev при установке и оставлены такими же.
Ничто в ядре не требует какого-либо конкретного именования, но приложение, которому нужно искать неиспользуемую пару, обычно имеет определенные ожидания в отношении именования.
Большинство людей считает, что псевдотерминалы BSD устарели с появлением псевдотерминалов Unix 98. И похоже, что несколько дистрибутивов Linux отказались от поддержки псевдотерминалов BSD. Однако, если вы можете найти ядро, которое все еще поддерживает псевдотерминалы BSD, вы можете использовать эту поддержку для создания пары индексных дескрипторов устройств точно так, как вы просите.
mknod /dev/my-master c 2 42
mknod /dev/my-slave c 3 42
Обратите внимание, что они должны оставаться за пределами /dev/pts
, так как /dev/pts
для псевдотерминалов Unix 98.
Если вам просто нужно передать поток символов и вам не нужны все другие функции, которые может предложить псевдотерминал, то может быть проще использовать именованный канал.
mknod будет работать, за некоторыми исключениями. Синтаксис:
mknod /path/to/new/dev c major minor
Так, например, вы, вероятно, сможете создать новое устройство типа pts с
mknod /tmp/mypts c 136 0
Однако я обнаружил, что если вы попытаетесь сделать это в / dev / pts, вы получите сообщение об отказе в доступе. Я могу сделать это в / dev, но не в / dev / pts. Я на коробке Centos 5.5. YMMV.
Это потому, что / dev / pts монтируется ядром (из моего файла / etc / fstab):
devpts /dev/pts devpts gid=5,mode=620 0 0
Это псевдофайловая система, управляемая ядром, и я бы не подумал, что возиться с ней - хорошая идея. Стандартный способ создать там новый файл - open () ing / dev / ptmx; который получит вызывающему процессу назначенный fd главного терминала, и новое устройство будет создано как / dev / pts / X, где X динамически выделяется ptmx как подчиненное устройство. Затем он будет открыт сам, обычно в результате процесса, разветвленного от исходного.
Вероятно, есть веская причина, почему это так. Я не уверен, что это такое, но я бы не пытался его сломать, если стабильность системы - это то, что вы цените.
При этом первая командная строка с реальными параметрами, которые я представил, позволит вам создать собственное устройство pts где угодно. но / dev / pts, и в зависимости от того, что вы собираетесь с ним делать, может быть, этого достаточно, чтобы добраться туда, куда вы собираетесь.