else
{
mandaPadre(SIGERRCMD);
}
}
} /* fin de ejecutaPrimitiva */
/*
*------------------------------------------------------------
*
* PROTOTIPO: int redireccion ( struct simple* )
*
* DESCRIPCION: implementa la redirección correspondiente
*
*--------------------------------------------------------------
*/
int redireccion ( struct simple *p )
{
int masc;
switch (p->redirecEntrada)
{
case REDIREC_FICHERO:
if (!dupDf (p->fichEntrada, O_RDONLY, STDIN))
return (FALSE);
break;
case REDIREC_SERVIDOR:
if (raiz->background == FALSE) /* se ha mandado un socket servidor en
foreground */
{
mandaPadre(SIGERRSERBACK);
return(FALSE);
}
if (!servidor (p->socketEntrada, SOCKET_ENTRADA))
return(FALSE);
break;
case REDIREC_CLIENTE:
if (!cliente (p->socketEntrada, SOCKET_ENTRADA))
return (FALSE);
break;
}
switch (p->redirecSalida)
{
case REDIREC_FICHERO:
masc = O_CREAT|O_WRONLY|(p->adicion?O_APPEND:O_TRUNC);
if (!dupDf (p->fichSalida, masc, STDOUT))
return (FALSE);
break;
case REDIREC_SERVIDOR:
if (raiz->background == FALSE) /* se ha mandado un socket servidor en
foreground */
{
mandaPadre(SIGERRSERBACK);
return(FALSE);
}
if (!servidor (p->socketSalida, SOCKET_SALIDA))
return (FALSE);
break;
case REDIREC_CLIENTE:
if (!cliente (p->socketSalida, SOCKET_SALIDA))
return (FALSE);
break;
case REDIREC_PANT:
masc=O_CREAT|O_WRONLY|O_TRUNC;
if (!dupDf ("resultado", masc, STDOUT))
return (FALSE);
break;
}
return (TRUE);
}