mslomp
(usa Slackware)
Enviado em 30/09/2008 - 18:55h
X será impresso i vezes, e como i vai de 0 a N-1, então teremos a impressão de X N vezes. N não está relacionado com o número de processos que serão efetivamente criados, pois pode ocorrer, em alguma circunstância fora do controle do seu programa, que fork() não possa criar o novo processo (retornando -1).
outra coisa: visto que N nunca poderá ultrpassar o valor de MAX, conforme a sentença:
if (N > MAX)
N = MAX;
você peca por excesso quando dimensiona sua variável pid:
pid_t pid[MAX+1];
desse modo sempre sobrarão 2 (e não 1) elementos vazios (lembrando sempre que a contagem começa em zero), pois na verdade apenas MAX-1 elementos são necessários. e como mais adiante i variará de 0 até N-1 (cuja distância = MAX-2), então NESSE CASO é seguro dimensioná-la da forma:
pid_t pid[MAX-1];
ah, caso você passe como parâmetro alguma coisa que não um número (inteiro), atoi retornará 0 e então, apesar de não ser desejado, ainda assim um processo poderá será criado, com i "variando" de 0 até 0. e para piorar, caso o crie e o mesmo seja um child (pid=0), outro processo também poderá será criado a seguir, pois pid[0] será 0, e pid[N-1] por não ter sido inicializado, muito provavelmente terá como valor alguma coisa qualquer (que não 0), e essas duas condições satisfarão a sentença:
if (pid[0] == 0 && pid[N-1] != 0)