|
19 / 19 / 7
Регистрация: 17.05.2013
Сообщений: 72
|
||||||
Передача считанного файла через pipe11.10.2013, 17:30. Показов 8327. Ответов 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 | |
|
Помогаю со студенческими работами здесь
33
Интегрирование полинома, считанного из файла Заполнить массив цифрами числа, считанного через cin
Передача данных между процессами (pipe) Передача данных между консолью с использованием Pipe Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|