Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перенаправить потоки 
:(
    Опции темы
cthutq
Дата 12.5.2006, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 16.4.2006

Репутация: нет
Всего: нет



подскажите пожалуйста как правильно перенаправлять потоки

например как из под своего процесса запустить cmd.exe в фоновом режиме,
отдать ему команду, и получить результат

например cmd.exe ipconfig /all

как создать процесс понятно, а вот как привязать к нему std::cin и std::cout ? 
PM MAIL   Вверх
_hunter
Дата 12.5.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98





--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
cthutq
Дата 12.5.2006, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 16.4.2006

Репутация: нет
Всего: нет



честно говоря - ничего не понял 
куда какие пайпы создаются ... 
PM MAIL   Вверх
cthutq
Дата 13.5.2006, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 16.4.2006

Репутация: нет
Всего: нет



написал
Код

/* -------------------------------------------------------------------------- */
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <vector>
/* -------------------------------------------------------------------------- */
const unsigned PIPE_SIZE = 4096;
/* -------------------------------------------------------------------------- */
int main(int argc, char* argv[])
{
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);

    SECURITY_ATTRIBUTES sa = {0};
    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
    sa.bInheritHandle = TRUE;
    sa.lpSecurityDescriptor = NULL;

    HANDLE outRead = INVALID_HANDLE_VALUE;
    HANDLE outWrite = INVALID_HANDLE_VALUE;
    HANDLE inRead = INVALID_HANDLE_VALUE;
    HANDLE inWrite = INVALID_HANDLE_VALUE;

    CreatePipe (&outRead, &outWrite, &sa, 0);
    CreatePipe (&inRead, &inWrite, &sa, 0);
    SetHandleInformation(outRead, HANDLE_FLAG_INHERIT, 0);
    SetHandleInformation(inWrite, HANDLE_FLAG_INHERIT, 0);

    STARTUPINFO si = {0};
    PROCESS_INFORMATION pi = {0};
    si.cb = sizeof(STARTUPINFO);
    si.hStdError = outWrite;
    si.hStdOutput = outWrite;
    si.hStdInput = inRead;
    si.dwFlags = STARTF_USESTDHANDLES/* | STARTF_USESHOWWINDOW*/;
    si.wShowWindow = SW_HIDE;

    GetStartupInfo (&si);
    if (!CreateProcess( NULL, "c:\\windows\\system32\\cmd.exe",
                        NULL, NULL, FALSE, 0/*CREATE_NEW_CONSOLE*/,
                        NULL, NULL, &si, &pi))
    {
        std::cout << "Error create process" << std::endl;
        return 1;
    }

    unsigned long dwWrite = 0;
    unsigned long dwRead = 0;

    std::vector<unsigned char> buffer(4096);
    std::string cmd = "ipconfig /all";

    BOOL write = WriteFile (inWrite, &cmd[0], (DWORD)cmd.size(), &dwWrite, NULL);
    //BOOL write = WriteFile (hOut, &cmd[0], (DWORD)cmd.size(), &dwWrite, NULL);
    if (write && dwWrite){

    }

    BOOL read = ReadFile (outRead, &buffer[0], (DWORD)buffer.size(), &dwRead, NULL);
    if (read && dwRead){
        int k = 0;
    }

    WaitForSingleObject( pi.hProcess, INFINITE );
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
    return 0;
}



но что-то не получается отдавать команды и читать их smile 
PM MAIL   Вверх
Replicator
Дата 13.5.2006, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 30.4.2006
Где: Outer Heaven

Репутация: нет
Всего: нет



А ты попробуй, например, так:
Код

system('dir c:\>file.txt');

Потом читаешь файл file.txt и удаляешь его. Вот тебе и пайп. А главное, кроссплатформенный способ. 
--------------------
 
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.