Anda di halaman 1dari 11

Departamento de Informtica Universidad Tcnica Federico Santa Mara

Taller de Sistemas Operativos

Archivos y Directorios
Atributos de un archivo, estructura del sistema de archivos, enlaces simblicos y operaciones sobre el directorio
1

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Funciones: stat, fstat y lstat


#include <sys/types.h> #include <sys/stat.h> int stat(const char *pathname, struct stat *buf); int fstat(int *fildes, struct stat *buf); int lstat(const char *pathname , struct stat *buf); return: 0 si OK, -1 si existe error

stat retorna estado de un archivo con nombre fstat retorna estado de un archivo abierto lstat es similar a stat, pero se aplica a un enlace simblico (no entrega informacin sobre el enlace referenciado)
Ral Monge III-2

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Estructura de Estado de un Nodo


struct stat { /* estructura dependiente de la implementacin */ mode_t ino_t dev_t dev_t nlink_t uid_t gid_t off_t time_t time_t time_t long long };
Ral Monge III-3

st_mode; st_ino; st_dev; st_rdev; st_nlink; st_uid; st_gid; st_size; st_atime; st_mtime; st_ctime; st_blksize; st_blocks;

/* tipo de archivo & modo (permisos) */ /* # de i-node */ /* # de dispositivo (sistema de archivo) */ /* # de dispositivo para archivos especiales */ /* # de enlaces */ /* User ID del dueo */ /* Grupo ID del dueo */ /* tamao en bytes para archivos regulares */ /* tiempo de ltimo acceso */ /* tiempo de ltima modificacin */ /* tiempo de ltima modificacin de status */ /* mejor tamao de bloque de E/S */ /* # de bloques asignados de 512 bytes */

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Tipos de Archivo
Archivo Regular. String de bytes (binario o texto) Archivo de Directorio. Contiene nombres, atributos y puntero a otros archivos. Archivo de Especial de Caracteres. Corresponde a un dispositivo de caracteres (e.g. terminal). Archivo de Especial de Bloques. Corresponde a un dispositivo de bloques (e.g. disco). FIFO. Para IPC (pipe con nombre) Socket. Para IPC (en redes)
Ral Monge III-4

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Permisos de Acceso
Cada archivo tiene permiso de lectura, escritura y ejecucin (RWX) para el dueo, el grupo y otros (9 bits en st_mode). Bit de ejecucin en directorios es permiso de bsqueda. Para poder abrir un archivo cualquiera es necesario tener permiso en cada directorio en el sendero hacia el archivo. Los permisos pueden ser cambiados con el comando chmod.
Ral Monge III-5

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Set-user-ID y Set-group-ID
Cada proceso tiene 6 o ms Id`s asociados: El ID real del usuario y del grupo se toman del archivo de passwd y no cambian (excepto para superusuario) El ID efectivo del usuario y del grupo determina permisos de acceso a archivos El saved set-user ID y saved set-group-ID contienen copias de los ID efectivos y se usan con la funcin setuid.
Ral Monge III-6

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Mecanismo de Cambio de ID
Normalmente la ID efectiva coincide con la real. Sin embargo existe un modo que permite que un proceso tome su ID efectiva del archivo (bits setuser-ID y/o set-group-ID activados en st_mode) Aplicacin:
Cambio de password: usuario debe modificar archivo perteneciente a root y grupo sys.

Ral Monge

III-7

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Verificacin de Permisos
Si el ID efectivo del usuario es 0 (superusuario), el acceso est permitido. Si el ID efectivo del usuario es igual al ID del dueo del archivo, acceso se concede si est habilitado, sino negarlo. Si el ID efectivo del grupo (o uno suplementario) es igual al ID del dueo del archivo, acceso se concede si est habilitado, sino negarlo. Si el acceso apropiado de OTROS est habilitado, se concede el acceso, sino negarlo.

Ral Monge

III-8

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Bits de Permisos de Acceso en el Archivo


st_mode mask S_IRUSR S_IWUSR S_IXUSR S_IRGRP S_IWGRP S_IXGRP S_IROTH S_IWOTH S_IXOTH S_ISUID S_ISGID S_IXOTH
Ral Monge

Significado user-read user-write user-execute group-read group -write group -execute other-read other -write other -execute set-user-ID on execution set-group-ID on execution saved-text (sticky bit)
III-9

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Propiedad de Archivos y Directorios Nuevos


POSIX.1 define para la creacin de un archivo (open o creat)
La propiedad del archivo es igual al ID efectivo del usuario La propiedad del grupo es igual ID efectivo del grupo o al ID de grupo del directorio.

Segunda opcin de ID de grupo garantiza que esta se propague en el subrbol del directorio en cuestin.
Ral Monge III-10

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Funcin: access
#include <unistd.h> int access(const char *pathname, int mode); return: 0 si OK, -1 si existe error

Permite verificar permisos de accesos usando ID reales mode es OR de R_OK, W_OK, X_OK y F_OK Sirve cuando se tiene activado set-XX-ID para verificar si usuario real tiene permisos
Ral Monge III-11

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Funcin: umask
#include <sys/types.h> #include <stat.h> mode_t umask(mode_t cmask); return: mscara anterior del modo creacin del archivo

Permite modificar la mscara del modo de creacin de archivos o directorio del proceso. Bits en alto se sustraen del permiso de acceso Es normal usar mscara 022 (en octal)
Ral Monge III-12

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Funciones: chmod y fchmod


#include <sys/types.h> #include <stat.h> mode_t chmod(const char *pathname, mode_t mode); mode_t fchmod(int filedes, mode_t mode); return: 0 si OK, -1 si existe error

Permite modificar permisos de acceso del archivo por nombre o descriptor mode es el OR al bit de permisos de acceso (9 bits) mas 2 bits para setuser-ID y set-group-ID. Algunas versiones antiguas de UNIX suportan el sticky bit para mejorar el desempeo de algunos programas (permitido slo por superusuario su activacin), manteniendo programa en rea de swap.
Ral Monge III-13

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Funciones: chown, fchown y lchown


#include <sys/types.h> #include <sys/unistd.h> int chown(const char *pathname , uid_t owner, gid_t group); int fstat(int *fildes, uid_t owner, gid_t group ); int lstat(const char *pathname , uid_t owner, gid_t group); return: 0 si OK, -1 si existe error

Permite cambiar ID del dueo y del grupo (con restricciones: superusuario para UID y grupos del dueo) Interpretacin de cada funcin similar a stat, i.e.:
Archivo por nombre archivo abierto enlace simblico
Ral Monge III-14

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Tamao de un Archivo
Se indica en st_stat de la estructura stat y se interpreta as:
Archivo regular: Nmero de bytes del archivo. Directorio: Bytes ocupados por el nodo (normalmente un mltiplo de 16 o 512) Enlace simblico: largo en bytes del nombre

Un archivo regular puede tener un tamao superior al espacio de disco asignado (existen huecos en el archivo, que se interpretan como 0s).
Ral Monge III-15

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Funciones: truncate y ftruncate


#include <sys/types.h> #include <unistd.h> int truncate(const char * pathname, off_t length); int ftruncate(int fildes, off_t length); return: 0 si OK, -1 si existe error

Ambas funciones (no son parte de POSIX.1) truncan un archivo al tamao length. En caso de ser menor el largo real, efecto depende de implementacin:
puede extender al largo agregando 0 (existe un hueco), o dejarlo tal cual.
Ral Monge III-16

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Sistema de Archivos
Un dispositivo de almacenamiento (e.g. disco) se divide en particiones, existiendo un sistema de archivos en cada particin. El superbloque describe el sistema de archivo El sistema puede disponer de un bloque de arranque. Cada i-node describe a un archivo, existiendo un contador de enlaces (desde directorios). Un i-node de directorio tiene mnimo 2 enlaces.
Ral Monge III-17

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Estructura del Sistema de Archivo


particin particin particin

i-list Boot-block(s) Super block

Bloques de directorio y datos

i-node i-node ... i-node i-node i-node ... i-node

Ral Monge

III-18

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

i-nodes
mode owners timestamps Block size count direct blocks data data data data data data data data

data data

data data data data

single indirect double indirect triple indirect


Ral Monge

data data

data data
III-19

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Funcin: link
#include <unistd.h> int link(const char *existingpath, const char *newpath); return: 0 si OK, -1 si existe error

Permite crear en el directorio un nuevo enlace a un archivo existente. Se debe incrementar el contador de enlaces. Muchos sistemas slo permiten enlaces (duros) en un mismo sistema de archivos. Slo el superusuario puede crear un enlace que apunta a un directorio (evitar ciclos).
Ral Monge III-20

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Funcin: unlink
#include <unistd.h> int unlink(const char *pathname); return: 0 si OK, -1 si existe error

Permite eliminar un enlace a un archivo en un directorio. Se debe decrementar el contador de enlaces en el i-node referenciado. El archivo sigue accesible si existen otros enlaces. Si la cuenta alcanza 0, el archivo es borrado (en caso de estar abierto, esta operacin se posterga hasta el cierre).
Ral Monge III-21

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Funcin: remove
#include <stdio.h> int remove(const char *pathname); return: 0 si OK, -1 si existe error

Permite eliminar un enlace a un archivo o directorio, y forma parte de ANSI C. Para un archivo remove es equivalente a unlink. Para un directorio remove equivale a rmdir.

Ral Monge

III-22

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Funcin: rename
#include <stdio.h> int rename(const char *oldname, const char *newname); return: 0 si OK, -1 si existe error

Permite renombrar un enlace a un archivo o directorio, y forma parte de ANSI C. Si se renombra un archivo, y el nuevo nombre existe, este ltimo es borrado. Si se renombra un directorio, y el nuevo nombre existe, este ltimo se borra ssi est vacio.
Ral Monge III-23

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Enlaces Simblicos
Es un puntero indirecto, a diferencia de un enlace duro a un i-node. Permite superar superar limitaciones de estos ltimos:
Es posible cruzar a otro sistema de archivo No est limitado al superusuario

Ral Monge

III-24

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Funcin: symlink
#include <unistd.h> int symlink(const char *actualpath, const char *sympath); return: 0 si OK, -1 si existe error

Permite crear en el directorio un enlace simblico a un archivo o directorio. No es necesario que actualpath exista, y ambos nombres no requieren estar en el mismo sistema de archivo.
Ral Monge III-25

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Funcin: readlink
#include <unistd.h> int readlink(const char *pathname, char *buf, int bufsize); return: 0 si OK, -1 si existe error

Permite leer el nombre del enlace simblico, retornando el largo del string (no es terminado con 0). Dado que open sigue los enlaces simblicos, esta funcin permite efectivamente leer el enlace.
Ral Monge III-26

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Funcin: mkdir
#include <sys/types.h> #include <sys/stat.h> int mkdir(const char *pathname , mode_t * mode); return: 0 si OK, -1 si existe error

Crea un directorio nuevo y vacio. Entradas . y .. se crean automticamente mode especifica permisos de acceso, que son modificados por la mscara del proceso (umask)
Ral Monge III-27

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Funcin: rmdir
#include <unistd.h> int rmdir(const char *pathname ); return: 0 si OK, -1 si existe error

Permite borrar un directorio vaco. Si el # de enlaces llega a cero, y no est abierto por ningn proceso, se libera el espacio ocupado por el directorio.

Ral Monge

III-28

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Lectura de Directorios
Puede ser ledo por quien tiene permisos, pero slo el kernel puede modificarlo. Estructura de entrada depende de la implementacin (tpicamente incluye slo nombre e i-node) Esta estructura la define struct dirent en <dirent.h>
Ral Monge III-29

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Funciones: opendir, readdir, rewinddir y closedir


#include <sys/types.h> #include <dirent.h> DIR *opendir(const char * pathname); return: puntero si OK, NULL si fin de directorio o existe error struct dirent readdir(DIR * dp); return: puntero si OK, NULL si existe error int rewinddir(DIR *dp); int closedir(DIR *dp); return: 0 si OK, -1 si existe error

Permite abrir, leer, rebobinar y cerrar un directorio


Ral Monge III-30

10

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Caching de Archivos
El Sistema Operativo mantiene en el kernel un cache consistente en buffers de bloques del disco. Lectura y escritura se prioriza a los buffers. Escritura al disco se retarda (delayed write). Para garantizar consistencia en el disco, se usan funciones ad-hoc.
Ral Monge III-31

Departamento de Informtica Universidad Tcnica Federico Santa Mara Taller de Sistemas Operativos

Funciones: sync y fsync


#include <unistd.h> int sync(void); int fsync(int fildes); return: 0 si OK, -1 si existe error

sync permite respaldar todos los buffers modificados en el sistema al disco.


El sistema normalmente llama en forma peridica esta funcin (tpicamente cada 30 [s] por update)

fsync permite respaldar todos los buffers modificados de un archivo.


Ral Monge III-32

11

Anda mungkin juga menyukai