URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9532
[ Назад ]

Исходное сообщение
"Вопрос по pclose"

Отправлено Kvest , 30-Авг-12 14:55 
Доброго всем времени суток!
Имеется такой кусок кода:
FILE *pf = popen(command,"r");
if (fp != NULL)
{
  result = pclose(fp);
}
return result;

Фактически это обращение к утилите с просьбой выполнения различный вещей. Утилита требует админ пароль, он добавляется в command. Проблема в том, что если пароль неверный, то поток выполнения навсегда повисает в pclose(fp)(утилита там постоянно перезапрашивает пароль, говоря что ввели неверный). Как мне навесить на pclose таймаут или еще каким то образом определить что утилита не отработала и отпустить поток дальше?


Содержание

Сообщения в этом обсуждении
"Вопрос по pclose"
Отправлено me , 30-Авг-12 18:51 
Как мне навесить на pclose
> таймаут или еще каким то образом определить что утилита не отработала
> и отпустить поток дальше?

alarm()


"Вопрос по pclose"
Отправлено pavlinux , 31-Авг-12 01:33 
> поток выполнения навсегда повисает в pclose(fp)


...
pid = fork()
    if (pid == 0) {
         alarm(60);
         pf = popen(command,"r");
         if (pf == NULL)
               return -1;  
    }

    if (pid > 0) {
         waitpid (pid, &status, 0);

         if (WTERMSIG(status) == SIGALRM)
            /* timeout handler */
         else
             ...

         if (pf != NULL)
             result = pclose(fp);

          return result;
    }

    if (pid < 0 )
           return -1;  
...


как-то так.

    


"Вопрос по pclose"
Отправлено Kvest , 03-Сен-12 17:49 
Спасибо,pavlinux, помог!