Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ** UC: 21111 -Sistemas Operativos
- ** e-fólio A 2019-20 (ab.c)
- **
- ** Aluno: 1802614 - Pedro N. Silva
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <ctype.h>
- void arvore (int n, int i);
- int main (int argc, char *argv[])
- {
- /*
- Ponto de entrada do processo ab, responsavel por validar os parametros de entrada e devolver erro caso não sejam válidos.
- Se tudo estiver correcto invoca a função principal ab(n)
- */
- if ( argc!= 2 )
- {
- printf("Deve invocar o processo da seguinte forma: ./abs <n>\n");
- printf(" n - nº de processos filhos das cadeias A e B , com 0 ≤ n ≤ 32\n");
- exit(1);
- }
- // sscanf para solicitar o argumento de entrada de string para inteiro
- // argv[0] - Nome do programa
- // argv[1] - Argumento n
- // Validacao do n
- int n;
- if ( sscanf( argv[1], "%d", &n ) != 1 )
- {
- printf("Erro escrever um numero inteiro\n");
- exit(1);
- }
- if ( n < 0 || n > 32 )
- {
- printf("Valor incorrecto de n (0<=n<=32)\n");
- exit(1);
- }
- return ab (n);
- }
- void arvore(int n, int i)
- {
- pid_t pid;
- if (0)
- {
- //imprime ID de pai
- printf("Cadeia de processos em V invertido com n=\n");
- printf("Processo AB tem PID=%5d\n", (int) getpid());
- sleep(3);
- for(i=1; i<=n; i++)
- {
- pid = fork();
- if(pid==-1)
- {
- perror("Erro na funcao fork()");
- exit(1);
- }
- else if(pid>=0)
- {
- pid_t filho_pid = fork();
- sleep(1);
- if(filho_pid==-1)
- {
- perror("Erro na funcao fork()");
- exit(1);
- //cria programa neto
- } else if(filho_pid>=0) {
- //imprime programa neto
- printf("Processo B%d : PID=%5d e PPID=%5d\n",\
- i, (int) getpid(), (int) getppid());
- //wait(NULL);
- exit(0);
- }
- //imprime programa filho
- printf("Processo A%d : PID=%5d e PPID=%5d\n",\
- i, (int) getpid(), (int) getppid());
- sleep(1);
- exit(1);
- }
- sleep(4);
- }
- return;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement