LINUX.ORG.RU

system() в C++


0

0

Есть код:
char ip[15];
cout << "Input IP" << endl ;
cin >> ip;
Далее нужно выполнить пинг до хоста, который ввел пользователь. Читал доки, наткнулся на вызов system(). Но нигде не смог найти код, как передать нужный параметр в этот вызов. Если кто поможет, буду премного благодарен. Спасибо.

anonymous

:)

ну раз уж на C++... первое что пришло на ум:


#include <string>
#include <iostream>


int main()
{
  std::string cmd_str;
  std::string ip_str;

  cmd_str = "ping "; // опции для ping можно добавить по вкусу
  std::cout << "Input IP" << std::endl ;
  std::cin >> ip_str; 

  cmd_str += ip_str;
  
  system(cmd_str.c_str());
  
  return 0;
}

Cy6erBr4in ★★★
()
Ответ на: комментарий от Cy6erBr4in

Cпасибо! Но думаю все согласятся что это несколько извращенный способ :) Гуглил и откопал ссылку http://www.ssl.stu.neva.ru/psw/os/safecgi.txt Там есть интересный код:
system("/usr/lib/sendmail -t " + FooAddress + " < " + InputFile);
Только вот приспособить его для себя никак неполучается.

anonymous
()

system принимает один аргумент, строку си-стиля, которая должна содержать имя выполняемой программы и все ее аргументы. Если Вы пишете под линукс, например, то можно сначала воспользоваться fork для создания дочернего процесса:

#include <unistd.h>

pid_t fork();

а затем заместить данный дочерний процесс другой программой

int execvp(const char * file, const char ** argv);

После этого, в родительском процессе дождаться завершения дочернего с помощью одной из функций:

pid_t wait(int * status);

pid_t waitpid(pid_t pid, int * status, int options);

pid_t wait3(int * status, int options, struct * rusage);

pid_t wait4(pid_t pid, int * status, int options, struct * rusage);

Demon37 ★★★★
()
Ответ на: комментарий от anonymous

Да ерунда всё это... :) "главное чтобы ты учился хорошо..." (С) анекдот

Cy6erBr4in ★★★
()

Я вот у себя в программе сделал такую штуку: перегрузил слегка функцию system таким образом:

int system(std::string cmd) {
     return system(cmd.c_str());
}

а потом в коде уже использую, например, таким образом:

system("ping " + ip_address);

Кажется, это наиболее элегантное решение, особенно если system приходится вызывать много где.

aix27249
()

> char ip[15]; > cout << "Input IP" << endl ; > cin >> ip;

если пользователь введет более 15 символов то будет трындец.

Reset ★★★★★
()
Ответ на: комментарий от Cy6erBr4in

> std::string cmd_str; > std::string ip_str;

> cmd_str = "ping "; // опции для ping можно добавить по вкусу > std::cout << "Input IP" << std::endl ; > std::cin >> ip_str;

...И при вводе чего-то вроде "; rm -rf ~" получается очень милый эфект... =)

Sectoid ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.