En esta tarea, nos familiarizaremos con el API descrito en el capítulo del libro. Para hacer esto, usted solo debe escribir unos cuantos programas, la mayoría basados en varias utilidades UNIX. En el presente laboratorio solo es necesario realizar los tres primeros ejercicios, el último queda a libre criterio.
En los enlaces adjuntos se coloca un resumen de las llamadas de sistema mas importantes. Algunas de estas deberán ser usadas en la actividad tal y como se muestra en los ejercicios. Si requiere mas consulta puede hecharles un vistazo en la sección de abajo (referncias de utilidad).
- Stat: Escriba su propia versión del comando
stat
(consulte sobre lo que hace este), la cual simplemente invoca la llamada del sistemastat()
en un archivo o directorio. Imprima el tamaño del archivo, el número de bloques asignado, contador de referencias (links), etc. ¿Qué significa el contador de referencias (link count) de un directorio?, ¿cómo cambia el número de entradas en el directorio? Interfaces útiles:stat()
, naturalmente.
stat es una funcion que devuelven información del fichero especificado. No se necesitan derechos de acceso al fichero para conseguir la información pero sí se necesitan derechos de búsqueda para todos los directorios del camino al fichero.
El link count indica el número total de enlaces que tiene un archivo, que no es más que el número de enlaces duros que tiene un archivo. Este recuento, sin embargo, no incluye el recuento de enlaces blandos.
Un directorio tiene un link count que comienza en 2, uno es el que proviene de la entrada en el directorio principal, mientras que el segundo proviene del "." entrada es decir el directorio se vincula a sí mismo. Cada subdirectorio agregado aumenta el link count en uno, debido a la entrada en cada subdirectorio.
- List Files: Escriba un programa que liste los archivos en un directorio dado. Cuando sea llamado sin argumentos, el programa deberá imprimir solo los nombres del archivo. Cuando se invoque con la flag
-l
, el programa deberá imprimir la información de cada archivo tal como, owner, group, permissions y otra información obtenida de la llamada de sistemastat()
. El programa deberá tomar un argumento adicional el cual es el directorio a leer, por ejemplo,myls -l directory
. Si ningún directorio es dado, el programa deberá usar el directorio de trabajo actual. Interfaces útiles:stat()
,opendir()
,readdir()
,getcwd()
.
Para ejecutar el programa puede utilizar:
./ls.out
./ls.out -l
./ls.out PruebaLS
./ls.out -l PruebaLS
-
Tail: Escriba un programa que imprima una cuantas líneas al final de un archivo. El programa deberá ser eficiente, de manera que realice un seek para desplazarse cerca del final del archivo, realice una lectura de un bloque de datos y luego retroceda hasta encontrar el número de líneas solicitado; hasta este punto, el programa debería imprimir esas lineas desde el principio al final del archivo. Para invocar el programa, uno deberia digitar:
mytail -n file
, donden
es el número de lineas al final del archivo a imprimir. Interfaces Útiles:stat()
,lseek()
,open()
,read()
,close()
. -
Recursive Search: Escriba un programa que imprima los nombres de cada archivo y directorio del árbol del sistema de archivos (file system tree), empezando en un punto dado del sistema de archivos en el árbol. Por ejemplo, cuando ejecute sin argumentos, el programa deberá empezar con el directorio de trabajo actual e imprimir su contenido, así como con los contenidos de cualquier subdirectorio en este, etc., hasta que el árbol entero, root en el CWD sea impreso. Si se da un único argumento (de un nombre de un directorio), use este como root en vez de él del sistema. Refine su busqueda recursiva con más opciones de busqueda divertidas, similar a la poderosa herramienta por línea de comandos
find
. Interfaces Útiles: Resolverlo.