Lenguaje para programar PFS. (LPFS)

Para que el PFS se comporte de la manera que nosotros deseamos, necesitamos poder decirselo mediante un lenguaje. Con dicho lenguaje le comunicaremos al PFS las acciones que tiene que hacer en determinadas situaciones (reglas). Las reglas del lenguaje las escribiremos en un fichero (fichero de álgebra), el cual será leido por el PFC cuando arranque.

El lenguaje con el que escribiremos las reglas en el fichero del álgebra lo definiremos a continuación de manera detallada.

La estructura básica de dicho lenguaje estara formada por reglas, de la siguiente manera:

guarda ->

accion1

accion2

....

accionN

Como se puede apreciar, guarda es el antecedente de la regla y como consecuente se enumeran una lista de acciones. Si la guarda nos devuelve un 1, las acciones del consecuente se ejecutan. Si la guarda nos devuelve un 0, no se ejecutan las acciones del consecuente.

Las lineas del fichero del álgebra deben de estar separadas por un retorno de carro.

Tipos de guardas

La funcion de las guardas es la de asegurarse del cumplimiento de ciertas caracteristicas. Esas caracteristicas pueden referirse a caracteristicas de ficheros o a caracteristicas de directorios. Por tanto se contemplan estos dos tipos de guardas, las referidas a ficheros y las referidas a directorios.

Referidas a ficheros

La sintaxis de una guarda referida a ficheros es la siguiente:

iffile programa

Si ese antecedente se cumple hara que las acciones del consecuente se ejecuten. Para que se cumpla, el programa deberá devolver un 1. Ese programa puede ser un script o un binario. Por ejemplo:

iffile check_user

En este caso hemos usado una guarda que actuara sobre un fichero, de ahi que hayamos colocado la palabra "iffile". El programa check_user que hemos colocado es un script que mira en los atributos del fichero y si esta a nombre del usuario "glenda" devuelve un 1, sino un 0.

Podemos concluir que si un fichero esta a nombre de "glenda", la regla con dicho antecedente se cumplirá y ejecutará las acciones que tenga definidas.

Referidas a directorios

La sintaxis de una guarda referida a directorios es la siguiente:

ifdir programa

Al igual que en el caso anterior, si ese antecedente se cumple, hará que las acciones del consecuente se ejecuten. Para que se cumpla, el programa deberá devolver un 1. Ese programa puede ser un script o un binario. Por ejemplo:

ifdir has_file_log_mail

Como la guarda que hemos usado actuará sore un directorio, usamos la palabra "ifdir". El programa has_file que hemos colocado es un script que mira en el contenido del directorio para ver si contiene un fichero de log de correo si existe dicho fichero, devuelve un 1, sino un 0.

Concluimos que si un directorio contiene un fichero de log de correo, la regla con dicho antedecente se cumplirá y ejecutará las acciones que tenga definidas.

Tipos de acciones

Se ejecutan como consecuencia del cumplimiento de los antecedentes en las reglas.

- Modificar el contenido de un fichero.

file= programa

Con esta sintaxis indicamos que el programa va a modificar el contenido del fichero, de ahi que hayamos usado la palabra "file=".

Ejemplo:

file= change_v_b

Con esta sentencia indicamos que vamos a cambiar el contenido del fichero, cambiando v's por b's.

Hay que tener en cuenta que esta acción solo puede existir en una regla si su consecuente es un iffile.

- Modificar los atributos de un fichero.

attr= programa

Con esta sintaxis indicamos que el programa va a modificar los atributos del fichero, de ahi que hayamos usado la palabra "attr=".

Ejemplo:

attr= change_perm

Con esta sentencia indicamos que vamos a cambiar los atributos del fichero, cambiando los permisos por unos nuevos.

Hay que tener en cuenta que esta acción solo puede existir en una regla si su consecuente es un iffile.

- Añadir ficheros a un directorio.

addfile(atributos,contenido)

Con esta sintaxis indicamos que vamos a añadir un fichero a un directorio.

Esta accion se puede ejecutar tanto en reglas con consecuente iffile como ifdir.

- Añadir directorios a un directorio

adddir(atributos,contenido)

Con esta sintaxis indicamos que vamos a añadir un directorio a un directorio.

Esta accion se puede ejecutar tanto en reglas con consecuente iffilecomo ifdir.

- Añadir un arbol de ficheros a un directorio

addtree(arbol)

Con esta sintaxis indicamos que vamos a añadir un arbol de ficheros a un directorio.

Esta accion se puede ejecutar tanto en reglas con consecuente iffile como ifdir.

- Ejecutar otro fichero de algebra.

other= fichero_de_algebra

Esta sentencia se puede usar para hacer anidaciones de reglas.

Por ejemplo podemos querer hacer que si existe un fichero de log de correo en un directorio, se cambie el contenido de los ficheros .inbox (las v's por b's).

Para ello hariamos en nuestro fichero de algebra principal la siguiente regla:

ifdir has_file_log_mail

 other=other_file

Y en el otro fichero llamado other_file hariamos la siguiente regla:

iffile is_inbox

 file=change_v_b

Asi obtendriamos anidamiento de reglas de una manera limpia.