Как выполнить команду bash в C и получить вывод? - PullRequest
4 голосов
/ 13 ноября 2011

Я пытаюсь выполнить команду bash из c, получить и показать результат. Я пытался с системой, но она не работает. Мой код выглядит так:

char command[200];
sprintf(command,"lsof -iTCP:%d | cut -d\"\" -f1 | tail -1",port);
printf("Port %d is open\n and is listened by %s",port,system(command));

Пожалуйста, помогите. Мне это нужно.

Ответы [ 2 ]

6 голосов
/ 13 ноября 2011

Изменить , помимо фактического вопроса, я бы использовал

sudo netstat -tlpn

(показывает процессы, которые прослушивают порты TCP, но не разрешают порты / адреса)

Возможно, объедините его с небольшим количеством grep:

sudo netstat -tlpn | grep :7761

, чтобы найти, где прослушивается порт: 7761?


Вы можете использовать popen.

С помощью popen вы получаете преимущество, заключающееся в том, что вы получаете выходные данные процесса асинхронно (вы сможете остановить обработку, если ответ находится в первой строке вывода, не дожидаясь завершения подпроцесса; просто pclose и подпроцесс умрет с SIGPIPE)

Образец прямо из Стандартной документации :

В следующем примере демонстрируется использованиеpopen() и pclose() для выполнения команды ls * для получения списка файлов в текущем каталоге:

#include <stdio.h>
...


FILE *fp;
int status;
char path[PATH_MAX];


fp = popen("ls *", "r");
if (fp == NULL)
    /* Handle error */;


while (fgets(path, PATH_MAX, fp) != NULL)
    printf("%s", path);


status = pclose(fp);
if (status == -1) {
    /* Error reported by pclose() */
    ...
} else {
    /* Use macros described under wait() to inspect `status' in order
       to determine success/failure of command executed by popen() */
    ...
}
1 голос
/ 14 ноября 2011

система (команда) возвращает код возврата команды, а не ее вывод.Если вы хотите прочитать выходные данные команды, вы должны использовать popen . Это возвращает файловый дескриптор для вывода, который вы можете прочитать из обычного файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...