La práctica consiste en realizar un programa en lenguaje C al
que llamaremos lista y
que debe servir para mostrar información sobre ficheros o
directorios de un modo similar (aunque mucho más limitado) a
como lo hace el comando ls. El
programa funcionará con las siguientes opciones:
$ lista [-f <formato>] [-s
<criterio>] [<nombre>]
donde todos los parámetros son opcionales, y <nombre> hace
referencia a un nombre de fichero o de directorio. Si el
parámetro <nombre>
no se proporciona, se sobreentiende que deseamos listar el contenido
del directorio actual "."
.
El significado de las
opciones es el siguiente
- -f <formato>
- Indica el formato de los datos a mostrar por cada fichero en la
cadena codificada <formato>. En esa
cadena se señalan qué datos se muestran y en qué
orden. Para ello, se usa una letra diferente para cada dato del
fichero, con el siguiente significado
-
n
|
|
nombre del fichero o
directorio
|
p
|
|
permisos, en formato
rwxrwxrwx
|
l
|
|
número de enlaces
|
o
|
|
nombre del propietario
|
g
|
|
nombre del grupo
|
s
|
|
tamaño
|
b
|
|
número de bloques
|
t
|
|
tipo de fichero ('-' normal,
'l' link, 'd' directorio)
|
a
|
|
fecha de último acceso
|
m
|
|
fecha de última
modificación
|
r
|
|
si el fichero es un link,
muestra el path al fichero al que apunta (usando la llamada al sistema realpath).
Si no es un link, simplemente este campo queda vacío y no se
muestra nada.
|
- Por ejemplo, los argumentos -f tpsbn
indican que se desea mostrar el tipo, los permisos, el tamaño,
el número de bloques y el nombre de cada entrada del directorio,
mientras que con los valores -f nog mostraría
solamente el nombre, el propietario y el grupo. Por defecto, si la
opción -f no
es invocada, equivale a usar -f btplogsanr que
es la misma información que muestra el comando ls -las.
- -s <criterio>
- Sólo tiene efecto cuando <nombre> es un
directorio. Indica que las entradas de ese directorio deben mostrarse
de forma ordenada, donde <criterio> es una
cadena que codifica el criterio a usar para la ordenación. Esta
cadena puede contener cualquiera de las letras vistas para el
parámetro -f <formato> salvo el
path real r. De este modo, por ejemplo,
si se usan los valores -s lan
se indica que queremos ordenar ascendentemente por el número de
enlaces, y en caso de tener el mismo número de enlaces, ordenar
ascendentemente por la fecha de último acceso, y en caso de
coincidir también en ese dato, ordenar ascendentemente por
nombre. Para indicar que queremos orden descendente en alguno de los
campos, usaremos la versión en mayúscula de la letra
correspondiente. Así, por ejemplo, los valores -s MbN indican
que queremos ordenar descendentemente por fecha de última
modificación, entre los que tengan la misma fecha,
ascendentemente por número de bloques, y entre los que tengan
también igual número de bloques, descendentemente por
nombre.
Por supuesto, ambas opciones se pueden combinar. Por ejemplo:
- lista
-f nps -s S dir1
indicaría que deseamos mostrar nombre permisos y tamaño
de las entradas del directorio
dir1,
ordenándolas descendentemente por su tamaño.
Funciones a usar
Las siguientes funciones realizan llamadas al sistema que
serán de utilidad:
- La información de cada fichero se obtiene con stat
o lstat.
- Para obtener el listado de los ficheros de un directorio deben
usarse las funciones opendir,
readdir
y
closedir .
- Los nombres de los usuarios, a partir del login pueden obtenerse
con getpwent
o getpwuid
y los del grupo con getgrent
o getgrgid.
- El lugar apuntado por un enlace simbólico puede obtenerse
con o realpath.
- La fecha puede convertirse a formato cadena con o
ctime.
- Para realizar las ordenaciones, se recomienda utilizar la
función qsort.
Los permisos de directorios y ficheros deberán indicarse en el
formato
-rwxrwxrwx.
La práctica se
realizará de forma individual o en grupos de dos
personas, siendo preferible esto último. La presentación
de la práctica tendrá lugar preferentemente en el
laboratorio durante el
horario de clase y, en el caso de los grupos, es obligatoria la
presencia de los dos alumnos que lo componen.
La práctica es obligatoria
y, por tanto, aprobarla
es imprescindible para aprobar la asignatura.
La entrega se realizará
utilizando
el sistema de
buzón
de prácticas. La
fecha límite de entrega de
la
práctica es el
martes 11
de diciembre, quedando
inhabilitado
el buzón al día siguiente. Tras esta fecha, se
abrirá un plazo de defensa en horario de tutorías para
aquéllas prácticas en buzón que excepcionalmente
no hayan sido presentadas en el laboratorio.