Как прочитать стандартный вывод из ФАЙЛА *, созданного с помощью libexpect в C ++ в Linux?

Используя C ++, я создал FILE *, используя libexpect:

FILE* fd = exp_popen("ssh root@sunblaze");

Я попал в командную строку, используя:

exp_fexpectl(fp , exp_exact , "password: " , 1 , exp_end);

Теперь остальные находятся в оболочке bash, и я хочу получить содержимое файла там,
поэтому я должен запустить команду cat /port1/port и получить все, что он печатает в буфере символов.
Как я могу это сделать?

fgets не похоже на работу …

заранее спасибо

0

Решение

Предполагая, что ваша машина и «sunblaze» находятся в защищенной, защищенной от огня среде, я бы использовал «ssh-keygen» и «ssh-copy-id root @ sunblaze», чтобы ваш идентификатор пользователя мог войти в систему, чтобы загорать без пароля. , Таким образом, в вашем коде нет пароля, на который кто-то может взглянуть.

Да, я знаю, это было не то, что вы спрашивали …

Я не понимаю, почему fgets(str, size, fd); — У меня будет небольшая игра, чтобы выяснить …

Это определенно работает:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <tcl8.5/expect.h>
#include <errno.h>

int main()
{
char str[512];
FILE *f = exp_popen("ssh user@mybox ls -lR");
if (f==NULL)
{
printf("Failed (%s)\n", strerror(errno));
return 1;
}
while(fgets(str, sizeof(str)-1, f))
{
printf("%s", str);
}
return 0;
}

Однако, если вывод ssh не имеет новой строки, очевидно, fgets () не завершится. Когда я впервые попробовал, он застрял на вопросе о пароле — но когда я изменил его на машину, на которую я могу войти без пароля, он работал нормально.

0

Другие решения

нашел способ, после создания соединения, как я сделал, оболочка:

[root@sanblaze ~]#

я пишу команду, используя, например:

fputs("echo LinkReset > /port4/port\r" , fp);
exp_fexpectl(fp, exp_exact , "]# " , 1 , exp_end);

чтение содержимого файлов с помощью grep:

fputs("cat /port4/port | grep -w Mode\r" , fp);
exp_fexpectl(fp, exp_exact , "]# " , 1 , exp_end);

после выполнения вышеизложенного, выражение «exp_buffer», являющееся глобальной переменной, содержит весь текст, полученный из удаленной оболочки с момента последнего запуска «exp_fexpectl», ведьма означает только вывод моей команды. осталось только разобрать его.

0

По вопросам рекламы [email protected]