Sistemas de Operação
Trabalho Prático 2
Ano Lectivo de 2002/2003
Estrutura de dados struct command
#define MAXARGS 100
struct command {
char *cmd; /* String apenas com o comando */
char *argv[MAXARGS+1]; /* Vector de argumentos do comando */
char *input; /* String para redireccionamento de input */
char *output; /* String para redireccionamento de output */
struct command *next; /* Próximo comando na pipe */
};
Observações:
- O campo cmd possui o comando propriamente dito.
- O campo argv possui o vector de argumentos do
comando. O primeiro argumento é o próprio comando
(argv[0]=cmd), seguem-se os argumentos correspondentes
aos argumentos do comando (argv[1], ...,
argv[n]) e termina com o argumento NULL
(argv[n+1]=NULL). Este campo só é usado a partir da
etapa 3.
- O campo input possui a string com o nome do ficheiro
para onde a entrada foi redireccionada ou, caso não tenha sido
indicado qualquer redireccionamento de input, o valor NULL. Este
campo só é usado a partir da etapa 6.
- O campo output possui a string com o nome do ficheiro
para onde a saída foi redireccionada ou, caso não tenha sido
indicado qualquer redireccionamento de output, o valor
NULL. Este campo só é usado a partir da etapa 7.
- O campo next possui o apontador para o comando seguinte
na pipe ou, caso não tenha sido indicada qualquer pipe, o valor
NULL. Este campo só é usado a partir da etapa 8.
O objectivo final (após a etapa 8) é que a função parse
retorne uma lista ligada de comandos separados por pipes, como
representado na figura: