Как обнаружить сбойную команду в popen? - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь выяснить, как определить, когда команда, вызванная popen , терпит неудачу.В программе test.c ниже, popen возвращает ненулевое значение, хотя команда не выполняется.Любые подсказки?

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *fp;
    int status;

    fp = popen("foo", "r");
    if (fp != NULL) {
        puts("command successful");
        status = pclose(fp);
        if (status < 0) {
            perror(NULL);
            exit(EXIT_FAILURE);
        }
    } else {
        perror(NULL);
        exit(EXIT_FAILURE);
    }
    return 0;
}

Выход:

$ ./test
command successful
sh: 1: foo: not found

1 Ответ

0 голосов
/ 13 июня 2018

Как я понимаю, справочная страница , pclose должна возвращать код выхода.Здесь вы проверяете на <0, что было бы верно, если бы <code>pclose сам не удался.Проверка на> 0 будет затем проверять, не была ли вызвана вызываемая программа (имел код завершения> 0).

Страница справочника pclose:

Функция pclose () ожидаетсвязанный процесс завершается и возвращает состояние завершения команды, возвращенное wait4.

и

Функция pclose () возвращает -1, если wait4 возвращает ошибку,или обнаружена какая-то другая ошибка.

...