2013-06-17 2 views
0

У меня проблема с этим кодом, потому что этот цикл не передает правильные аргументы сыну и генерирует некоторую ошибку с помощью fork.Execl (параметры передачи) в c

nproc представляет собой процесс с числами, который должен быть создан как 5, например x установлен в 1 значение, и я хочу перейти к моему новому процессу как 1,2,3, поэтому каждый процесс как число и записать его в файл ...

я не знаю, могу ли я сделать .. пожалуйста, помогите

но второй параметр righeoperazione является 5 и передается правильно, но потому, что всегда же отец код, где я поставил 2 типа Int и преобразуется в строку EXEC

/* father process*/ 
char param[0]=""; 
char param1[0]=""; 
for (i=0 ; i<NPROC ; i++) { 
pid=fork(); 
if (pid==-1) { // pid=-1; error process 
        write(STDOUT,"fork error pid -1 ", 18); 
        } 
else if (pid==0) { 
      sprintf(param1,"%d",x); 
      sprintf(param,"%d",righeoperazioni); 
      execl("processore.x","processore.x",&param,&param1,(char *)NULL); 
      write(STDOUT,"fork error ", 11); 
      } 
else { write(STDOUT,"fork error else ", 15); } 
x++;   
} 

INT основного (интермедиат ARGC, символ * ARGV []) {// обработка сына

int nump=0; 
int righe; 
int oper=0; 
char nome[10]; 
char temp[10]; 
    char temp1[10]; 

    nump=atoi(argv[2]);     // 
    oper=atoi(argv[1]);     // 


    righe=oper; 
sprintf(nome,"%d",getpid()); 
int report = openFile(nome,O_CREAT | O_RDWR,S_IRUSR | S_IWUSR); 
sprintf(temp,"%d",nump); 
sprintf(temp1,"%d",oper); 
    stampa(report,"Number processo : ",18); 
stampa(report,temp,strlen(temp)); 
stampa(report,"\Number comandi : ",18); 
stampa(report,temp1,strlen(temp1)); 
stampa(report,"\n",1); 

сын код, который захват 2 параметра (Stampa такой же, как пишет, но с -1 управления)

+0

Исправьте углубление, оно, очевидно, очень сломан. – unwind

+0

Очень сложно сделать что-то из этого вопроса. – Terry

+0

'write (STDOUT,« fork error else », 15);' - вам не нравится 'printf (« fork error else »);' намного лучше? В дополнение к тому, что вам не нужно подсчитывать ваш результат, вы также можете обеспечить динамический вывод :) – mah

ответ

0

Вы даете execl char **, а не char *, как вы должны дать. Попробуйте

execl("processore.x","processore.x",param,param1,(char *)0);//EDIT!!! 

объявить Также param1 и параметры с некоторыми более размером

char param1[64], param[64]; 

для того, чтобы держать ваши «рванули» целые числа.

+0

извините за эту операцию причину *** обнаружено разбиение стека ***: padre.x завершено –

+0

@ AlexandrosAléksoTodeschini ваши переменные param имеют место для ровно 0 символов, но вы пишете больше, чем в них. Примените предложение V_Maenolis о том, чтобы на самом деле дать им какой-то размер, потому что без этого вы перехватите стек (как указывает ваша ошибка). – mah

+0

Мой плохой !! execl ("processore.x", "processore.x", param, param1, (char *) 0); –

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