У меня есть множество подпрограмм M-Code, поставляемых поставщиком, в составе гораздо более крупного продукта, который использует READ
и WRITE
непосредственно для взаимодействия с текущим устройством. Я не могу изменить этот код. Я хочу обернуть некоторые из этих подпрограмм в системе, где я могу обеспечить ввод и вывод вывода в интерактивном режиме.Перенаправление тока IO-устройства для взаимодействия сторонних сторон
В настоящее время это реализовано путем открытия TCP-соединения с удаленным хостом и создания текущего устройства. READ
и WRITE
действительно подключены к розетке. Это довольно неудобно, так как требуется, чтобы отдельная служба, которая прослушивает TCP-сокет, настраивалась и координировалась с локальным заданием, чтобы весь процесс работал. Я также должен отключить наглость и пропустить буферизацию, или соединение становится латентным или закрытым. (например, опция ОТКРЫТО TCP /SEN=1
aka +Q
). К сожалению, это приводит к множеству 1-байтовых сегментов TCP и также очень неэффективно.
Я бы предпочел бы управлять всем взаимодействием через один процесс. В идеале я мог бы звонить на READ
, WRITE
, а другие функции, которые работают с текущим устройством, запускают некоторые M-коды или обратные вызовы в Caché Callin C interface или модуль расширения пользователя, чтобы обеспечить требуемые функции на задней панели. Таким образом, я могу управлять IO на своих собственных условиях без необходимости координации между процессами. Тем не менее, я не смог найти точку входа.
Есть ли такая вещь, как пользовательское устройство в Caché?
Для хостов UNIX существует способ использовать существующий файловый дескриптор в качестве устройства, что может быть полезно, но, похоже, оно не реализовано в Windows.
Одна вещь, которую я рассмотрел это, чтобы создать новый процесс, есть Windows, перенаправлять STDIN
и STDOUT
с SetStdHandle к трубам я контролирую из того же процесса, используйте Callin для подключения к Caché и пусть это использовать устройство по умолчанию, который, как предполагается, должно быть STDIN
и STDOUT
. Кто-нибудь знает, действительно ли это работает?
Удивительно, это именно то, что я искал. Спасибо! –