1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

C fork() semáforos help!

Discussão em 'Programação' iniciada por nelson98, 27 de Novembro de 2018. (Respostas: 0; Visualizações: 164)

  1. Fiz um programa em C, que recebia múltiplos ficheiros que eram abertos pelo processo filho, e se desse erro na abertura, o pai incrementava esse erro e imprimia no fim.

    Agora preciso de criar múltiplos filhos, 1 para cada ficheiro, e usar semáforos para bloquear os filhos, pois estes têm de começar ao mesmo tempo.

    Código que tenho agora sem semáforos:

    #include<stdio.h>
    #include<unistd.h>
    #include<stdlib.h>
    #include<ctype.h>
    #include<sys/wait.h>

    int main(int argc, char*argv[])
    {
    int i,contador=0,erros=0,status;
    FILE*fp; // Declarar o ficheiro
    int pidpai=getpid(); //pid do pai

    if(argc<2)
    { //proteção par ao numero de argumentos
    printf("argumentos insufecientes, ficheiro necessario\n");
    exit(1);
    }

    for(i=1;i<=argc-1;i++)
    {
    contador++; //conta o numero de files
    if(pidpai==getpid())//fica com o pid do programa principal
    {
    if(fork())
    {
    wait(&status);// o processo pai espera pelo filho que acabe e recebe um valor na variável status
    if(status==0)
    erros++; //sempre que o status for 0, é porque houve um erro na abertura de um file
    } // e é incrementado a variavel erros
    else
    {
    printf("\nPID=(%d) ficheiro: %s\n",getpid(),argv);
    fp=fopen(argv,"r");// abre o ficheiro para leitura
    if(fp==NULL)
    return 0;//devolve 0 caso haja erro
    else
    return 1;//devolve 1 se abrir corretamente
    }
    }
    }
    printf("Ficheiros:%d Erros:%d\n",contador,erros);// mostra o numero de files e erros no ecrã

    }
     

Partilhar esta Página