aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/CMakeLists.txt2
-rw-r--r--examples/exec.c67
2 files changed, 69 insertions, 0 deletions
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 3e7b6dcc..77eb4173 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -14,10 +14,12 @@ include_directories(
add_executable(libssh_scp libssh_scp.c ${examples_SRCS})
add_executable(scp_download scp_download.c ${examples_SRCS})
add_executable(samplessh sample.c ${examples_SRCS})
+add_executable(exec exec.c ${examples_SRCS})
target_link_libraries(libssh_scp ${LIBSSH_SHARED_LIBRARY})
target_link_libraries(scp_download ${LIBSSH_SHARED_LIBRARY})
target_link_libraries(samplessh ${LIBSSH_SHARED_LIBRARY})
+target_link_libraries(exec ${LIBSSH_SHARED_LIBRARY})
include_directories(
${LIBSSH_PUBLIC_INCLUDE_DIRS}
diff --git a/examples/exec.c b/examples/exec.c
new file mode 100644
index 00000000..077b94fd
--- /dev/null
+++ b/examples/exec.c
@@ -0,0 +1,67 @@
+/* simple exec example */
+#include <stdio.h>
+
+#include <libssh/libssh.h>
+#include "examples_common.h"
+
+int main(void) {
+ ssh_session session;
+ ssh_channel channel;
+ ssh_buffer buf;
+ int rc;
+
+ session = connect_ssh("localhost", NULL, 0);
+ if (session == NULL) {
+ return 1;
+ }
+
+ channel = channel_new(session);;
+ if (channel == NULL) {
+ ssh_disconnect(session);
+ ssh_finalize();
+ return 1;
+ }
+
+ rc = channel_open_session(channel);
+ if (rc < 0) {
+ channel_close(channel);
+ ssh_disconnect(session);
+ ssh_finalize();
+ return 1;
+ }
+
+ rc = channel_request_exec(channel, "ps aux");
+ if (rc < 0) {
+ channel_close(channel);
+ ssh_disconnect(session);
+ ssh_finalize();
+ return 1;
+ }
+
+
+ if (channel_is_open(channel)) {
+ while (channel_poll(channel, 0) >= 0) {
+ buf = buffer_new();
+ rc = channel_read_buffer(channel, buf, 0, 0);
+ if (rc < 0) {
+ buffer_free(buf);
+ channel_close(channel);
+ ssh_disconnect(session);
+ ssh_finalize();
+ return 1;
+ }
+
+ printf("%s\n", (char *) buffer_get(buf));
+
+ buffer_free(buf);
+ }
+ }
+
+ channel_send_eof(channel);
+ channel_close(channel);
+
+ ssh_disconnect(session);
+ ssh_finalize();
+
+ return 0;
+}