|
19 / 19 / 7
Регистрация: 17.05.2013
Сообщений: 72
|
||||||
Передача считанного файла через pipe11.10.2013, 17:30. Показов 8571. Ответов 32
Метки нет (Все метки)
прошу помощи разобраться с чтением файла и передачей прочитанных данных через анонимный pipe
сам смысл задачи:программа запускается из консоли с двумя аргументами - стандартная команда из cmd и имя файла, в которой хранятся входные данные для самой команды.. пока застрял на осознании как работать с каналами в winapi.. в unix, ИМХО, проще как то.. есть набросок кода, но я не удивлюсь, если я там и близко не подошел к поставленной задаче.. собственно как исправить это чудовище, чтобы появилась возможность считанные данные запихать в новый процесс?
0
|
||||||
| 11.10.2013, 17:30 | |
|
Ответы с готовыми решениями:
32
Передача системного времени через pipe
|
|
Ушел с форума
|
|
| 16.10.2013, 13:43 | |
|
novi4ok, ну и чем именованные пайпы здесь помогут ?
О каком таком "геморрое" Вы вообще говорите ? Передача хэндла в дочерний процесс - это тривиальнейшая операция, да и весь код с редиректом вывода, например, можно уложить строк так в 50 от силы. У топикстартера проблема не с этим, а с тем, что он не может пока четко сформулировать то, что именно он хочет сделать с этими пайпами.
0
|
|
|
19 / 19 / 7
Регистрация: 17.05.2013
Сообщений: 72
|
||
| 16.10.2013, 13:50 [ТС] | ||
|
Добавлено через 25 секунд если я не прав, поправьте меня Добавлено через 5 минут Убежденный, просто поставлено условие так, что я должен видимо связать концы трубы со стандартными потоками ввода/вывода.. за счет это как раз исчезнет необходимость в использовании writefile.. что препод подсказывал, что нужно тут как то использовать _dup2, для линковки хэндлов, что в коде на unix ( там тоже все дело решается юниксовым dup2).. только там с этим делом легче.. открыл файл функцией open, он вернулся дескриптор в виде int.. и юзай спокойно dup2.. а под win это усложняется тем, что для создания трубы нужен именно HANDLE тип, который не воспринимает dup2.. соответственно, я так думаю, просто надо как то преобразовать в int
0
|
||
|
Ушел с форума
|
|
| 16.10.2013, 14:06 | |
|
0
|
|
|
19 / 19 / 7
Регистрация: 17.05.2013
Сообщений: 72
|
|
| 16.10.2013, 14:07 [ТС] | |
|
кстати, есть предположение, что краш программы происходит из-за такого приведения типа (int)pHandle..
но ведь HANDLE это указатель на воид? я правильно понимаю? то есть чтобы привести к int, надо сначала разыменовать, а потом приводить к int.. но VS отказывается наотрез это делать.. как быть?
0
|
|
|
Ушел с форума
|
|||
| 16.10.2013, 14:08 | |||
|
"представляясь" для дочернего процесса хэндлами стандартных потоков. И дочерний процесс может писать и читать стандартный ввод и вывод через std::cout и std::cin, но при этом чтение и запись будут идти в пайп. На x64 размер HANDLE равен 8 байтам, а int - 4. Усечение.
0
|
|||
|
19 / 19 / 7
Регистрация: 17.05.2013
Сообщений: 72
|
||
| 16.10.2013, 14:18 [ТС] | ||
|
0
|
||
|
Ушел с форума
|
|||||||||||
| 16.10.2013, 14:52 | |||||||||||
|
Ок, вот код, который запускает дочерним процессом командный интерпретатор и
вызывает в нем команду dir (вывод сведений о текущей папке). Вывод перенаправляется в консоль родительского процесса. Обработка ошибок и очистка ресурсов для наглядности опущены:
Вывод:
Если нужно вводить какие-то команды или данные, придется сделать второй пайп (stdin) и из посылать их из родительского процесса. По мотивам все того же примера из MSDN.
1
|
|||||||||||
| 16.10.2013, 19:10 | ||
|
вариант с named pipe для него проще, т.к. задача с пайпом остается, но отпадает задача передавать хэндл.
0
|
||
|
19 / 19 / 7
Регистрация: 17.05.2013
Сообщений: 72
|
|
| 18.10.2013, 16:30 [ТС] | |
|
Убежденный, то, что нужно) спасибо) я не догадался, что можно и в стринг из трубы данные запихать и вывести через cout.. надеялся все же что можно как нибудь системными вызовами избавиться от writefile)
а можно дочернему процессу сказать что его hStdInput - это файл какой нибудь? я пробовал, но ничего хорошего из этого не вышло) такое ощущение, что процесс просто не хочет воспринимать входные данные с файла
0
|
|
|
Ушел с форума
|
||
| 18.10.2013, 17:20 | ||
|
большинстве случаев можно передавать объекты разных типов. Главное - сохранить семантику. Если, например, пайп заменяется файлом, то файл должен вести себя, как пайп.
1
|
||
|
19 / 19 / 7
Регистрация: 17.05.2013
Сообщений: 72
|
||||||||||||
| 18.10.2013, 19:27 [ТС] | ||||||||||||
|
правда такой вариант не сработал
P.S. вопрос снят, Побегайло ответил на него) спасибо за активную помощь)
0
|
||||||||||||
|
Ушел с форума
|
||||
| 18.10.2013, 19:34 | ||||
|
Там есть ответы если не на все, то на большую часть вопросов.
0
|
||||
| 18.10.2013, 19:34 | |
|
Интегрирование полинома, считанного из файла Заполнить массив цифрами числа, считанного через cin
Передача данных между процессами (pipe) Передача данных между консолью с использованием Pipe Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|