четверг, 13 марта 2014 г.

Перенаправление вывода выполняется командным интерпретатором

Это перевод Command line redirection is performed by the command line interpreter. Автор: Реймонд Чен.

"Волшебные" символы перенаправления вывода <, > и | в командных строках вида:
myprogram.exe | sort > output.txt
обрабатываются командным интерпретатором CMD.EXE; они не встроены в функцию CreateProcess.

Это должно быть очевидно. Командная строка выше создаёт два процесса; описатель которого из них нужно возвращать CreateProcess?

Если вы передадите такую командную строку в функцию CreateProcess, то она просто передаст её "как есть" в указанную программу. Т.е. программа (myprogram.exe) увидит параметры вида "| sort > output.txt". Аналогичным образом поступит и функция ShellExecute.

Если вы хотите, чтобы эти символы интерпретировались бы как операторы перенаправления вывода, то вам нужно передать их тому, кто будет их интерпретировать таким образом:
cmd.exe /C myprogram.exe | sort > output.txt
Поскольку различные командные интерпретаторы используют разный синтаксис, то вам нужно явно указывать, какой интерпретатор вы хотите использовать.

Прим.пер.: стандартно в современных Windows есть CMD и PowerShell. В старых версиях Windows есть COMMAND.COM. Кроме того, существуют узкоспециализированные CScript, netsh, WMIC.

Если командная строка поступает к вам от пользователя, то вы, вероятно, захотите использовать переменную окружения COMSPEC для запуска командного интерпретатора - чтобы дать пользователю контроль над тем, какой командный интерпретатор использовать для его командной строки.

Читать далее: больше материала по CreateProcess.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.