enum tiposock{ SOCKET_DOS_VIAS, SOCKET_ENTRADA, SOCKET_SALIDA };
/*
*----------------------------------------------
* estructuras
*----------------------------------------------
*/
struct simple
{
char *token[MAX_TOKENS]; /* tokens del comando */
int contoken; /* numero de tokens */
int redirecSalida; /* tipo de IO_enum */
int redirecEntrada; /* tipo de IO_enum */
int adicion; /* VERDAD para modo añadir */
char fichSalida[MAX_STRING]; /* nombre fichero salida */
char fichEntrada[MAX_STRING]; /* nombre fichero entrada */
char socketSalida[MAX_STRING]; /* nombre socket salida */
char socketEntrada[MAX_STRING]; /* nombre socket entrada */
};
struct pipeline
{
struct simple simple [MAX_SIMPLE]; /* comandos en pipe */
int contcom; /* numero de comandos simples */
};
struct secuencia
{
struct pipeline pipeline[MAX_PIPES]; /* pipes en secuencia */
int contpipe; /* numero de pipes */
int background; /* en background o no */
};
/*
*------------------------------------------------------------
*
* PROTOTIPO: void ejecutaSimple ( struct simple* )
*
* DESCRIPCION: ejecuta un comando simple
*
*--------------------------------------------------------------
*/
void ejecutaSimple ( struct simple *p )
{
if (redireccion (p) == TRUE)
{
ejecutaPrimitiva (p);
}
} /* fin de ejecutaSimple */
/*
*------------------------------------------------------------------
*
* PROTOTIPO: void ejecutaPrimitiva ( struct simple* )
*
* DESCRIPCION: ejecuta una primitiva simple a través del comando
* "execvp"
*
*------------------------------------------------------------------
*/
void ejecutaPrimitiva ( struct simple *p )
{
if ( ((p->redirecSalida != REDIREC_SERVIDOR) && (p->redirecEntrada !=
REDIREC_SERVIDOR))
&&
(
(p->redirecSalida == REDIREC_CLIENTE) ||
(p->redirecEntrada == REDIREC_CLIENTE) ||
(p->redirecSalida == REDIREC_FICHERO) ||
(p->redirecEntrada == REDIREC_FICHERO)
)
)
mandaPadre(SIGDIBUJAR);
execvp (p->token[0], p->token);
if (errno != 0) /* ha ocurrido un error */
{
if (raiz->background == TRUE)
{
mandaPadreExit(SIGERRCMD);
}