viernes, 5 de marzo de 2010

utime y sigaction

Reyes Plata Alejandro

Plan de Becarios de Seguridad en Cómputo.

Llamadas al sistema.

utime, utimes: cambia los tiempos de acceso o modificación de un nodo –i.

SINOPSIS

# include
# include

int utime (const char *nombre_archivo, struct utimbuf *buf);

# include

int utimes (const char * nombre_archivo, struct timeval *tvp);

Descripción

El utime cambia los tiempos de acceso y modificación del nodo-í especificado por nombre_archivo a los campos actime y modtime de buf respectivamente. Si buf es NULL, entonces los tiempos de acceso y modificación del fichero se ponen al tiempo actual. La estructura utimbuf es:


El cambio en las marcas de tiempo se permite solo cuando al proceso se le han dado privilegios
o el identificador de usuario que realiza la llamada es igual a la identificación de usuario del archivo, o los tiempos son NULL y el proceso tiene permisos de escritura para el archivo.

La estructura utimbuf es:

struct utimbuf (
actime time_t; / * Tiempo de acceso * /
ModTime time_t; / * hora de modificación * /
);

El utime () llamada al sistema permite la especificación de marcas de tiempo con una resolución de
de 1 segundo.

El utimes () llamada al sistema es similar, pero el argumento buf se refiere a una matriz
en lugar de una estructura. Los elementos de esta matriz son estructuras timeval,
que permiten una precisión de 1 microsegundo para especificar las marcas de tiempo.
La
estructura timeval es la siguiente:

struct timeval (
largo tv_sec; / * segundos * /
largo tv_usec; / * microsegundos * /
);





VALOR DEVUELTO

En caso de éxito se devuelve cero. En caso de error se devuelve -1 y se pone en errno un valor apropiado.

EACCES el permiso de búsqueda es rechazado por uno de los directorios de la ruta de acceso.


EACCES se produce cuando el ID de usuario no coincide con el propietario del archivo, la persona realiza la llama no tiene acceso de escritura al archivo, y la persona que llama no tiene privilegios sobre el archivo ( CAP_DAC_OVERRIDE o la capacidad CAP_FOWNER).

ENOENT el nombre de archivo no existe.

EROFS la ruta reside en un archivo en el sistema de sólo lectura.


Sigaction: examinar y cambiar una señal de la acción.

#include

int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);

Descripción

El sigaction () es una llamada al sistema que se utiliza para cambiar la acción tomada por un proceso cuando recibe una señal específica.

signum especifica la señal y puede ser cualquier señal válida salvo SIGKILL y la SIGSTOP.

Si el act no es NULL, la nueva acción para la señal signum toma la actuar. Si oldact no es NULL, la acción anterior se guarda en oldact.
La estructura sigaction se define de la siguiente forma:

sigaction struct (
void (* sa_handler) (int);
void (* sa_sigaction) (int, siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
void (* sa_restorer) (void);
);


El parámetro siginfo_t para sa_sigaction es una estructura con los siguientes elementos.


siginfo_t {

int si_signo; /* Número de señal */

int si_errno; /* Un valor errno */

int si_code; /* Código de señal */

pid_t si_pid; /* ID del proceso emisor */

uid_t si_uid; /* ID del usuario real del proceso emisor */

int si_status; /* Valor de salida o señal */

clock_t si_utime; /* Tiempo de usuario consumido */

clock_t si_stime; /* Tiempo de sistema consumido */

sigval_t si_value; /* Valor de señal */

int si_int; /* señal POSIX.1b */

void * si_ptr; /* señal POSIX.1b */

void * si_addr; /* Dirección de memoria que ha producido el fallo */

int si_band; /* Evento de conjunto */

int si_fd; /* Descriptor de fichero */

}



VALOR DEVUELTO

Las funciones sigaction, sigprocmask y sigpending devuelven 0 en caso de éxito y -1 en caso de error. La función sigsuspend siempre devuelve -1, normalmente acompañado del error EINTR.

ERRORES

EINVAL Se ha especificado una señal inválida. Esto también se genera si se hace un intento de cambiar la acción para SIGKILL o SIGSTOP, que no pueden ser capturadas.

EFAULT act, oldact, set, oldset u mask apuntan a una zona de memoria que no forma parte válida del espacio de direcciones del proceso.

EINTR La llamada al sistema ha sido interrumpida.


Bibliografia:

http://www.kernel.org/doc/man-pages/online/pages/man2

No hay comentarios:

Publicar un comentario