e-fólio A 2020-21 UC:21111 - Sistemas Operativos
Aluno: 2000027 - Hélio Sousa
Referência ao ficheiro dit.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

Ir para o código fonte deste ficheiro.

Funções

int valida_args (int argc)
 
int valida_dir (char *argv[])
 
int fork_check (pid_t pid)
 
void msg_processo (char ch)
 
void msg_erro_processo (char ch)
 
void processo_Bls (char *argv[])
 
void processo_Cecho ()
 
void processo_Dwc ()
 
void processo_Ecat ()
 
int main (int argc, char **argv)
 

Variáveis

char ** environ
 

Documentação das funções

◆ fork_check()

int fork_check ( pid_t  pid)

Verifica a criação de um novo processo

Parâmetros
pidnumero do processo do pai
Retorna
0 sucesso na validação e -1 insucesso.

Definido na linha 68 do ficheiro dit.c.

◆ main()

int main ( int  argc,
char **  argv 
)

Programa dit ou Processo A. Será a partir deste programa que serão derivados 4 processos sequenciais gerados pelo mesmo pai (Processo A).

Parâmetros
argccontabiliza o numero de argumentos, neste caso, apenas se admite 2, o próprio programa ./dit e o diretório a ser analisado
argvretorna um apontador para o diretorio a ser analisado
Retorna
retorna uma lista do conteudo da diretoria contendo um item por linha, e adiciona no final o numero de itens da lista e imprime a lista na saída padrão (stout).

Definido na linha 161 do ficheiro dit.c.

◆ msg_erro_processo()

void msg_erro_processo ( char  ch)

retorna mensagem erro quando ocorre erro na execução de um programa exec??

Parâmetros
chletra que identifica o processo

Definido na linha 92 do ficheiro dit.c.

◆ msg_processo()

void msg_processo ( char  ch)

Imprime para a tela os dados de um processo. A denominação (A,B,...), o PID e o PPID.

Parâmetros
chletra do processo

Definido na linha 83 do ficheiro dit.c.

◆ processo_Bls()

void processo_Bls ( char *  argv[])

Primeiro redireciona-se o stdout para o ficheiro tmp1.txt. Depois executa-se a troca da imagem com o execl

Parâmetros
argvdiretorio passado na linha de comandos.

Definido na linha 101 do ficheiro dit.c.

◆ processo_Cecho()

void processo_Cecho ( )

Acrescenta no ficheiro tmp1.txt o texto "Itens encontrados: "

Parâmetros
argvdiretorio passado na linha de comandos.

Definido na linha 111 do ficheiro dit.c.

◆ processo_Dwc()

void processo_Dwc ( )

Redireciona o stout para o ficheiro tmp2.txt. Redireciona o stdin para o ficheiro tmp1.txt O comando wc -l lê o standard input se nenhum ficheiro for passado na linha de comandos. O seu output é redirecionado para o tmp2.txt

Definido na linha 124 do ficheiro dit.c.

◆ processo_Ecat()

void processo_Ecat ( )

Executa a concatenação dos ficheiros tmp1.txt e tmp2.txt e imprime o resultado final para o ecrã. Utiliza a função execvp que recebe como parametro o vetor arguments.

Definido na linha 140 do ficheiro dit.c.

◆ valida_args()

int valida_args ( int  argc)

Teste ao numero de argumentos, caso este seja diferente de 2 informa o utilizador e sai do programa.(dois argumentos pois o nome do comando conta como um argumento) atenção que argc conta também o comando em si, pelo que temos de contabilizar 2 um para o comando e outro para o diretório passado

Parâmetros
argcnumero de argumentos passados á função main()
Retorna
0 sucesso na validação e -1 insucesso.

Definido na linha 30 do ficheiro dit.c.

◆ valida_dir()

int valida_dir ( char *  argv[])

Optei pela função opendir() em vez do fopen, porque na fase de testes fopen retornava Ok para um ficheiro e apenas pretendemos dirirotios. Por isso, procurei uma função que indicasse se um dado diretorio existe ou não, mas integrado na norma UNIX e standard C, e opendir() cumpre esses critérios.

Parâmetros
argvdiretorio a ser introduzido
Retorna
0 sucesso na validação e -1 insucesso.

Definido na linha 49 do ficheiro dit.c.

Documentação das variáveis

◆ environ

char** environ

Nas funções que não têm envp como argumento, as variáveis de ambiente são as definidas na variável global environ.