2015-04-28 3 views
-2

Обновление: я попытался напечатать возвращаемое значение system(). Если ssh не удался, он вернет 65280, если он преуспеет, он вернет 0.Как получить ответный результат выполнения команды оболочки в C?

Я хочу, чтобы ssh на другой компьютер с моего ноутбука, я пишу программу на C, получаю доступ к этой машине и касаюсь файла на этой машине , Но иногда сеть нестабильна или, может быть, машина выключена. Поэтому ssh не удался. Как я могу узнать, что ssh не удалось выполнить эту программу? Когда-то ssh на эту машину преуспевает, но прикоснитесь к этому файлу, как отличить их в программе на C? Как я могу узнать, что команда оболочки была неудачной из-за ssh не удалось touch? Я не хочу смотреть на экран, я хочу, чтобы программа проверила это автоматически.

here is my code: 
#include<stdio.h> 
#include<stdlib.h> 
#include<time.h> 
int main(int argc,const char *argv[]) 
{ 
while(1) 
{ 
    system("ssh [email protected] -p 22210 'touch script/rebooter.sh'"); 
    sleep(5); 
} 
} 
+0

Вы должны открыть сокет и передать запрос. Затем вы можете проверить, какая часть неисправна. С вашим текущим кодом ничего не может быть сделано. – Deanie

ответ

1

Прочтите страницу руководства для системы.

Тип прото является

int system (constant char *command) 

Возвращаемые значения -1 системе не удалось выполнить команду из вилки сказать неудачу. Посмотрите на страницу man для execve и посмотрите номер ошибки, который может возникнуть. Все эти errnos являются причинами, по которым система вернет -1.

Все остальные значения возврата являются кодом выхода команды. 0 означает успех, все остальные значения означают, что команда вышла из строя с EXIT_FAILURE.

1

Использование функции popen() будет более легко:

#include<stdio.h> 
#include<stdlib.h> 
#include<time.h> 
int main(int argc,const char *argv[]) 
{ 
    FILE *fp; 
    fp = popen("ssh [email protected] -p 22210 'touch script/rebooter.sh'", "r"); 
    while(1) 
    { 
    char *line; char buf[1024]; 
    line = fgets(buf, 1024, fp); 
    if (line == NULL) break; 
    printf("%s", line); 

    } 
    pclose(fp); 
    return 0; 
} 
+0

Собственно, это не тот результат, который я хочу. Я хочу судить о том, не сработает ли она с помощью ssh, чтобы я мог позволить своему ноутбуку отправить уведомление на мой сайт. Есть ли у вас несколько методов, например, если эта команда не удалась, она вернет значение, чтобы я мог знать, почему это не удалось? – beasone

+0

ok, as @rhubarbdog положить это –

Смежные вопросы