2013-03-20 3 views
0

В основном ничего не найдено через поиск о вызове main - поэтому я собираюсь угадать, что этот вопрос состоит в том, что в принципе «выключен».call main (argc, argv) from fork()

Предлагаемые вопросы предоставляют этот C# question "Calling Main() from another class" ответ, что вы этого не сделали, используйте подфункцию под Main() и вызывайте это; поэтому мое предположение состоит в том, что тот же ответ применим здесь к fork().

void somefunction() 
{  
    pid_t pid; 
    pid = fork(); 

    if (pid == 0) { 

     char *p; 
     char *argv[] = { (char*)spawn_count, (char*)gradiant, (char*)i, (char*)(i+spread), p }; 
     main(5, **argv); 
    } 
    else if (pid == -1) 
     cout << "ERROR: can't fork" << endl; 

    else ; //PID == 1, 
} 

компилируется в г ++ с "error: 'main' was not declared in this scope"

Вопросы:

  • Как main(argc, argv) контекстными? Я могу следить за process in windows с помощью LPTSTR.
  • После fork(), чтобы начать ребенка с main(), как это сделать?
  • После fork(), где ребенок, в той же функции, которая называется дочерняя, в основном?
+7

Это незаконно называть 'main' в C++. – jrok

+2

После комментария jrok -> http://stackoverflow.com/questions/2128321 –

+0

, если он не был незаконным, то как основной объект - я пробовал каждый путь, но правильный, который скомпилирован без ошибок, является ли он указателем NULL в конец? –

ответ

-1

Для тех, кто попадает в ту же ловушку, которую я сделал - Linux и Windows, параллельная обработка работает очень по-разному.

  • В Windows, вы вызываете программу снова и передать аргументы через главный()
  • В Linux, вы звоните вилку(), а затем вызвать любую функцию, которую вы хотите из вашей программы, так же, как с любой другой функцией. Этот подход очень прост по сравнению с «дерьмом», который вы проходите в вихревых окнах.

После понимания этого различия, я немедленно удалены окна из моего ноутбука и установил Linux :)

1

Почему вы хотите позвонить в основное меню? Могли бы вы не просто вилкой в ​​главном чем-то, как показано ниже:

int main() 
{ 
    pid_t pid; 
    pid = fork(); 

    if(pid < 0) 
    { 
     // Error some issue forking 
    } 
    if (pid == 0) { 
     // Child related processing here 
    } 
    else { 
     // parent related processing here 
    } 
} 

вилка возвращается дважды один раз для родителей и один раз для ребенка и в той же точке, откуда была сделана система вилки вызова.

Вы можете сослаться на эту ссылку, чтобы узнать больше: http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html

+0

спасибо за учебник –