Ir para conteúdo
Fórum Script Brasil
  • 0

Fork() ao mesmo tempo com semáforos


Nelson Andrade

Pergunta

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ã

}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...