Programa C-2 [RESOLVIDO]

1. Programa C-2 [RESOLVIDO]

Alex
Nachi

(usa Fedora)

Enviado em 30/09/2008 - 14:39h

Boa tarde pessoal !!!
Gostaria tb de saber o que esta sendo realizado nesse programa

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

#define MAX 10

int main(int argc, char* argv[])
{
int N, i;
pid_t pid[MAX+1];

if (argc < 2) {
printf("USO: %s <N>\n",argv[0]);
return 1;
}

N = atoi(argv[1]);
if (N > MAX)
N = MAX;

for (i=0; i<N; i++)
pid[i] = fork();

if (pid[0] == 0 && pid[N-1] != 0)
pid[N] = fork();

printf("X");

return 0;
}

Alguem tem alguma dica ?

Alex


  


2. MELHOR RESPOSTA

Marcelo A. B. Slomp
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)

3. Re: Programa C-2 [RESOLVIDO]

Eduardo Pelizzari de Andrade
edupersoft

(usa Manjaro Linux)

Enviado em 30/09/2008 - 15:15h

O programa em si imprime X na tela, mas ele levanta quantos processos você informar (até 10/), para fazer isso. De uma olhada em:

http://www.vivaolinux.com.br/topico/C-C++/Programa-C2?


4. Re: Programa C-2 [RESOLVIDO]

Alex
Nachi

(usa Fedora)

Enviado em 30/09/2008 - 16:43h

Vc pode ser mais especifico ? sei que ele imprime X na tela e o numero de Xs esta relacionado com o numero de processos que o usuario pode criar. Qual seria o numero de Xs em funcao de N ?

Muito Obrigado

Alexandre


5. Re: Programa C-2 [RESOLVIDO]

Alex
Nachi

(usa Fedora)

Enviado em 01/10/2008 - 17:15h

Obrigado agora entendi bem melhor o que esta acontecendo !!
Valeu mesmo !






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts