2016-01-20 5 views
-1

Первое, извините, мой плохой английский и любые ошибки в запросе. Я много искал, но я не мог объяснить простыми словами. Я работаю с серверами Linux и командной строки, я привык называть программы через него, какC++ Выполните функцию через cmd или shell

./program foo -u adm -p 123 

Но я всегда задавался вопросом, как сделать программы, чтобы действовать так, я имею в виду вызвать определенную функцию и запись параметров без необходимости для открытия самой программы.

Иными словами.

Если я закодировать C++, как это и скомпилировать

#include <iostream> 
using namespace std; 

void SayHello(string Name) 
{ 
    cout << " Hello " << Name; 
} 

как я могу назвать его через командную строку, как

./Program SayHello CARLOS 

Sorry о моем невежестве, но это то, что я хочу учить.

Спасибо за ваше внимание

+0

Использование main, check http://www.site.uottawa.ca/~lucia/courses/2131-05/labs/Lab3/CommandLineArguments.html –

+0

Я предполагаю, что вы действительно хотите что-то вроде «./SayHello Carlos «который выводит« Привет Карлос »? –

+0

Да, спасибо за вашу помощь. Я прочитал сайт, и это помогло понять. :) – Matthew

ответ

1

Если вы хотите, чтобы вызвать функцию вашей программы на основе аргументов, вы могли бы сделать что-то вроде:

int main(int argc, char* argv[]) { 
    if(argc > 2){ 
     if(strcmp(argv[1], "SayHello") == 0){ 
      SayHello(argv[2]); 
     } 
    } 
    return 0; 
} 

Конечно, это всего лишь набросок, и я могу быть улучшен, если то, что вы хотите для достижения является более сложным. Вы также можете создать более динамическое решение, если хотите, чтобы другие функции, кроме «SayHello», были доступны для вызова.

+0

В других (более) словах нет никакой ссылки между именами функций в коде C или C++ и все, что вы делаете с ней как «строка». – usr2564301

+0

Спасибо, друг, я понимаю. Это было именно то, что мне нужно :) – Matthew

+0

Tht is C++; вы должны использовать функции, предоставляемые языками. – Olaf

-1
void main() { 
char *name[] = { 
    "./program", 
    "-c", 
    "foo -u adm -p 123", 
    NULL 
}; 
execvp(name[0], name); 
} 
+0

Спасибо за вашу помощь, будет полезно – Matthew

+0

Для стартера: 'main' имеет неправильную подпись. Массив указывает на строковые литералы, которые являются константами, но не являются 'const ...' и также не отвечают на вопрос. – Olaf

+0

@olaf согласен с первыми 2-мя утверждениями, но не спрашивал OP о программе «./program», выполняющей определенные функции «foo» и «write parameters -u adm -p 123»? – Bretsko

-2

Там вы идете каждый исполняемый файл нуждается в главной функции, которая является точкой входа для выполнения.

#include <iostream> 
#include <string> 
using namespace std; 

void SayHello(string Name) 
{ 
    cout << " Hello " << Name; 
} 

int main(int argc, char* argv[]) 

{ 

    if (argc > 1) 
     SayHello(argv[1]); 

} 

Чтобы скомпилировать это сделать

$ г ++ hello.cpp

Он должен производить a.out на Linux.

Чтобы запустить

./a.out "Мир!"

+0

Я думаю, он хочет« мир! » быть символом *, переданным в основной. –

+0

Хорошо, я просто изменил свою программу, чтобы перейти в «Мир!». – BGR

+0

Да, но спасибо за это. :) – Matthew

0

INT основных (INT ARGC, символ ** ARGV)

Здесь ARGC относится к числу аргумента (графа Arg) ARGV ссылается на массив аргументов ("символ *" массив) (значение Arg)

Вызов вашей программы из командной строки приведет к основной записи с этими параметрами; остается разобрать их и запустить команду соответственно.

+0

Я вижу сейчас, спасибо за помощь – Matthew

+0

Правильно отформатируйте свой ответ. Существует причина для разметки. Это просто уродливо. – Olaf

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