2014-04-06 2 views
1

내 Raspberry Pi에 ssh 세션을 열고 간단한 명령 echo 0=+10 > /dev/servoblaster을 원하는 시점에 실행하려고합니다 (다시 ssh를 실행하는 데 시간이 걸리므로 system("ssh [email protected] echo 0=+10 > /dev/servoblaster")을 사용하지 마십시오). C++에서 가장 쉬운 방법은 무엇입니까?Csh에서 원격으로 쉘 명령 보내기

+1

왜 [tag : C++]입니까? 사실 [tag : ssh]가 왜 그런가요? 여기서 해결하려는 근본적인 문제는 무엇입니까? – Johnsyweb

+1

위의 명령을 사용하여 Raspberry Pi가 서보 모터를 제어하는 ​​C++ 프로그램을 작성하고 있으며 ssh없이 Raspberry Pi에 액세스하여 명령을 실행할 수 있습니까? –

+1

직렬 포트를 통해 제어 명령을 보내지 않는 이유는 무엇입니까? 그것은 가장 직관적 일 것입니다. – lpapp

답변

0

단방향 통신 만 필요하다고 가정하면 system 대신 FILE *ssh = popen("ssh [email protected]", "w")으로 ssh 연결을여십시오. 이렇게하면 글을 쓸 핸들이 생깁니다. fprintf(ssh, "echo 0=%#d > /dev/servoblaster", 10);. ssh 연결은 어느 정도 나중에 pclose(ssh);까지 사용할 수 있습니다.

다시 읽어야 할 경우 "적절한 fork 구인"이 필요한 파이프의 양쪽을 열어야합니다. 이 경우, 아마도이 예제로 시작할 수 있습니다.

fork() and pipes() in c

+0

당신의 메서드와 Sysem() 메서드는 처음에는 ssh 연결을 만들기 위해 항상 시간이 걸리고 echo 명령을 실행합니다 (그리고 이것은 내 요구를 충족시키지 못합니다). ssh 연결을 유지하고 그것을 통해 echo 명령을 실행하고 싶습니다. –

+0

예,'popen'을 사용하면'ssh' 연결을 더 오랜 기간 동안 열어두고 여러 명령을 보낼 수 있습니다. 그것이 요점입니다. 나는 그것을 명확하게하기 위해 답을 편집했다. –

0

간단한 제어 명령을 전송의 경우, SSH는 적어도 말을하는 과잉이다.

사람들은 보통 간단한 직렬 포트를 사용합니다. QtSerialPort와 같은 라이브러리를 사용하거나 manual termios settings을 통해 여러 가지 방법으로이 작업을 수행 할 수 있습니다.

USB 연결을 통한 직렬 포트 작동을 위해 "gserial"을 사용하여 일반 직렬 포트로 사용할 수 있습니다.

+0

LAN 네트워크를 통해 제어하려고합니다. –

+0

@NhanLy : 왜 그러시 겠소? 어쨌든, SSH는 이상합니다. 네트워크 소켓을 사용할 수 있습니다. – lpapp

0

나는 C++ 위의 명령과 라즈베리 파이에 의해 서보 모터를 제어하는 ​​프로그램을 쓰고 있어요, 어떻게 내가 ssh를하지 않고 액세스 라즈베리 파이에 명령을 실행할 수 있습니까?

사용자가 액세스 할 수 및 실행이 WebIOPi에서 제공 REST API를 사용하여, 라즈베리 파이에 의해 서보 모터를 제어하는 ​​명령.