The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Обмен данными с утилитой на c++"
Отправлено Kvest, 25-Мрт-12 14:16 
> Вы бы текущий свой код привели здесь, было б проще подсказать.

   int pipesin[2], pipesout[2];
    pid_t fork_result;

    if (pipe(pipesin) == 0 || pipe(pipesout) == 0){
        fork_result = fork();
        if (fork_result == (pid_t)-1){
            //error
            return;
        }
    }
    else{
        //error
        return;
    }

    if (fork_result == (pid_t)0){
        //this is child process

        close(1);//close stdout
        dup(pipesout[1]);

        close(0); //close stdin
        dup(pipesin[0]);

        close(pipesin[1]);
        close(pipesout[0]);

        char *args[] = {"truecrypt", "-c" ,NULL};
        execvp("truecrypt", args);
    }
    else{
        //this is parent process
        close(pipesin[1]);       //Hroblem is here              
        close(pipesout[1]);

        int data_processed;
        char buffer[BUFSIZ + 1];

        data_processed = read(pipesout[0], buffer, BUFSIZ);
        printf("Read %d bytes: %s", data_processed, buffer);
   ..........

Ну обработка чтения-записи в пайпы еще не полноценная, это только заглушка. Проблема в строчке "Hroblem is here": если не вызывать закрытие пайпа(close(pipesin[1]);) - не приходит данныех на чтение(мы тупо останавливаемся на строчке data_processed = read(pipesout[0], buffer, BUFSIZ); и ждем данных), а если закрыть - то мне потом некуда писать данные т.к. пайп для записи я закрыл собственноручно.
т.е. в родительском процессе мне надо как то получить полноценные pipesout[0] для чтения данных из консоли и pipesin[1] для отправки данных. Что то у меня это никак не выходит. А дальше я в цикле просто буду читать данные из pipesout[0], анализировать их и отвечать по pipesin[1].

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру