Когда использовать именованные каналы в Windows? - PullRequest
0 голосов
/ 12 июля 2009

В * nix многие приложения командной строки, которые принимают имена файлов в качестве аргументов, также принимают каналы. Пример:

anApplication file.txt

Также работает с

anApplication | anotherApplication arguments

И результат «anotherApplication» перенаправляется в «anApplication», как это был файл

Я узнал, что Windows, эквивалентная этому, является "именованным каналом". Интересно, должно ли приложение командной строки знать именованные каналы, чтобы понять его, или же любое приложение командной строки, которое принимает файл в качестве аргумента, будет работать с именованным каналом.

Ответы [ 4 ]

9 голосов
/ 12 июля 2009

У тебя это довольно задом наперед. Просто чтобы быть точным:

anApplication file.txt

Это запускает anApplication с именем файла file.txt в качестве первого аргумента командной строки.

anApplication | anotherApplication arguments

Запускается anApplication без аргументов командной строки. Стандартный выход связан со стандартным входом anotherApplication, который запускается с arguments в качестве аргументов командной строки. Это точно так же в Windows, как и в версиях Unix. Именованные каналы - это совершенно другая функция ОС.

Именованный канал - это запись каталога, которая выглядит как файл, но действует как поток данных, к которому вы можете присоединить вывод и ввод.

4 голосов
/ 12 июля 2009

A именованный канал в Windows - это совсем не то, о чем вы говорите. Именованный канал на самом деле является инструментом, помогающим создавать серверные приложения в Windows, и примерно эквивалентен «сокету домена Unix».

В вашей ситуации, работает ли anApplication в этой ситуации, зависит от того, как приложение реагирует, когда выполняется без имени файла в командной строке. (Я говорю о расположении в вашем описании; командная строка указана в обратном порядке, как указано в другом ответе.) Если приложение читает из stdin при запуске без командной строки, то этот вид расположения оболочки будет работать. Если вместо этого приложение печатает сообщение справки и завершает работу при запуске без имени файла, этот канал оболочки не будет работать.

1 голос
/ 12 июля 2009

Обратите внимание, что это синтаксис cmd.exe.

Этот тип перенаправления каналов должен работать с любой программой, , поэтому, чтобы ответить на ваш конкретный вопрос, программе не требуется специальный код, если это стандартное консольное приложение.

Есть одна оговорка - если программа получает ввод через специальные формы мониторинга клавиатуры из API времени выполнения, перенаправление не будет работать.

1 голос
/ 12 июля 2009

AFAIK работает под Windows так же, как в UNIX. Я предполагаю, что некоторые более продвинутые функции Win32 Console API могут обойти это, но вам придется прочитать документацию для этого.

...