Sistema de Llamadas
1) Acceso : La llamada al sistema de acceso determina si el proceso que llama tiene permiso de acceso a un archivo. Se puede comprobar cualquier combinación de lectura, wr ite, y permiso de ejecución, y también puede comprobar la existencia de un archivo.
La llamada de acceso necesitan dos arguments.The primera es la ruta de acceso al archivo a check.The segundo es un bit a bit o de R_OK, W_OK y X_OK, cor responder a leer, wr ite, y ejecutar valor de retorno permission.The es 0 si el proceso cuenta con todos los permisos especificados. Si el archivo existe, pero el proceso de llamada no tiene los permisos especificados, ns acceso Retur -1 y asigna a errno el EACCES (o EROFS, si se solicitó permiso de escritura para un archivo en un sistema de archivos de sólo lectura).
Si el segundo argumento es F_OK, acceso simplemente comprueba la existencia del archivo. Si el archivo existe, el valor devuelto es 0, en caso contrario, el valor devuelto es -1 y errno se establece en ENOENT. Tenga en cuenta que errno puede en lugar de ajustarse a EACCES si un directorio en la ruta del archivo es inaccesible
2) fcntl :. Cerraduras y Otras Operaciones con archivos
La llamada al sistema fcntl es el punto de acceso para varias operaciones avanzadas en iptors archivo descr. El primer argumento de fcntl es un descriptor de fichero abierto, y el segundo es un valor que indica que la operación se va a realizar. Para algunas operaciones, fcntl toma un argumento adicional.
La llamada al sistema fcntl permite que un programa para colocar un bloqueo de lectura o un bloqueo de escritura en un archivo. Un bloqueo de lectura se coloca en un descriptor de archivo legible, y un bloqueo de escritura se coloca en un descriptor de archivo de escritura. Más que un proceso puede tener un bloqueo de lectura en el mismo archivo al mismo tiempo, pero sólo un proceso puede tener un bloqueo de escritura, y el mismo archivo, no puede ser a la vez bloqueada para lectura y bloqueada para escritura. Tenga en cuenta que la colocación de un bloqueo no impide en realidad que otros procesos de abrir el archivo, leyendo, o escribiendo a la misma, a menos que se adquieren bloqueos con fcntl también.
Para colocar un bloqueo en un archivo, primero crear y cero una var iable struct flock. Establezca el campo l_type de la estructura a F_RDLCK para un bloqueo de lectura o F_WRLCK para un bloqueo de escritura. Luego llame a fcntl, pasando un descriptor de archivo para el archivo, el código de operación F_SETLCKW, y un puntero a la var iable struct flock. Si otro proceso mantiene un bloqueo que impide una nueva cerradura de ser adquirida, bloques fcntl hasta que se libere esa cerradura.
Si prefiere fcntl no bloquear si la llamada no se puede obtener el bloqueo solicitado, utilice F_SETLK lugar de F_SETLKW. Si el bloqueo no puede adquirirse, fcntl retur ns -1 inmediatamente
3) fsync y fdatasync :. Flushing disco Buffers
En la mayoría de los sistemas operativos, cuando se escribe en un archivo, los datos no son inmediatamente itten wr en el disco. En su lugar, el sistema operativo almacena en caché los datos escritos en un búfer de memoria, para reducir el número de escrituras en disco necesarios y mejorar el programa de respuesta-
ness. Cuando el buffer se llena o alguna otra condición ocurre (por ejemplo, el tiempo transcurrido suficiente), el sistema escribe los datos en caché en el disco de una sola vez.
Para ayudarle a implementar esto, Linux proporciona la llamada al sistema fsync. Toma un argumento, un descriptor de archivo de escritura, y vuelca en el disco los datos grabados en el archivo. La llamada fsync no vuelve hasta que los datos físicamente se ha escrito.
Otra llamada al sistema, fdatasync hace lo mismo. Sin embargo, a pesar de las garantías de fsync que se actualizará la fecha de modificación del archivo, fdatasync no, sino que sólo garantiza que los datos del archivo serán written.This significa que, en principio, puede fdatasync
ejecutará más rápido que fsync porque necesita a la fuerza sólo un disco escribir en lugar de dos
4) getrlimit y setrlimit :. Límites de recursos
El sistema getrlimit y setrlimit llamadas permiten a un proceso para leer y establecer límites a los recursos del sistema que se puede consumir.
Para cada recurso hay dos límites, el límite físico y el límite suave limit.The suave nunca podrá superar el límite duro, y sólo procesos con privilegios de superusuario puede cambiar el limit.Typically duro, un programa de aplicación se reducirá el límite flexible a
colocar una válvula reguladora en los recursos que utiliza.
Tanto getrlimit y setrlimit tomar como argumentos un código que especifica el recurso limitar el tipo y un puntero a una iable structrlimit var. La llamada getrlimit llena los campos de esta estructura, mientras la llamada setrlimit cambia el límite en función de su
contents.The rlimit str ucture tiene dos campos:. Rlim_cur es el límite suave, y rlim_max es el límite duro
Algunos de los límites de recursos más útiles que se pueden cambiar se enumeran aquí, con sus códigos:
rlimit_cpu-El tiempo máximo de CPU, en segundos, que se utiliza por un program.This es la cantidad de tiempo que el programa es en realidad la ejecución en la CPU, lo cual no es necesariamente el mismo que el tiempo de reloj de pared. Si el programa excede este límite de tiempo, se termina con una señal SIGXCPU.
RLIMIT_DATA-La cantidad máxima de memoria que un programa puede asignar a sus datos. Atribución adicional más allá de este límite se producirá un error.
RLIMIT_NPROC-El número máximo de procesos hijo que se pueden ejecutar para este usuario. Si el proceso requiere tenedor y demasiados procesos pertenecientes a este usuario está ejecutando en el sistema, tenedor falla.
RLIMIT_NOFILE-El número máximo de descriptores de archivo que el proceso puede tener abiertos al mismo tiempo.
5) getrusage : Estadísticas del Proceso
La llamada al sistema getrusage recupera las estadísticas del proceso desde el núcleo. Puede ser utilizado para obtener estadísticas, ya sea para el proceso actual pasando RUSAGE_SELF como primer argumento,
o para todos los procesos secundarios terminados que fueron bifurcan por este proceso y sus hijos pasando RUSAGE_CHILDREN. El segundo argumento de rusage es un puntero a una struct rusage iable var, que se llena con las estadísticas
Algunos de los campos más interesantes en struct rusage se enumeran aquí:.
Ru_utime-Un campo timeval struct que contiene la cantidad de tiempo de usuario, en segundos, que el proceso se ha utilizado. Tiempo de uso es el tiempo de CPU dedicado a ejecutar el programa de usuario, en lugar de en las llamadas al sistema del kernel.
Ru_stime-Un campo timeval estructura que contiene la cantidad de tiempo del sistema, en segundos, que el proceso se ha utilizado. Hora del sistema es el tiempo de CPU gastado sistema de ejecución de llamadas en nombre del proceso.
Ru_maxrss-La mayor cantidad de memoria física ocupada por los datos del proceso de una sola vez a lo largo de su ejecución.
6) uname :
La llamada al sistema uname llena una estructura con distinta información del sistema, incluyendo el nombre del equipo de la red y el nombre de dominio y el funcionamiento la versión del sistema que se está ejecutando. Pase uname un único argumento, un puntero a un objeto struct utsname.
Incluya
La llamada a rellenos uname en estos campos:.
1) sysname-El nombre del sistema operativo (como Linux).
2) la liberación, La versión de Linux número de versión del kernel y el nivel de versión.
3) Máquina-Parte de la información acerca de la plataforma de hardware que ejecuta Linux. Para x86 Linux, esto es i386 o i686, dependiendo del procesador.
Nombre de host sin calificar 4) nodo del equipo.
5) __ dominio El nombre de dominio del ordenador.
7) sysinfo : La obtención de estadísticas del sistema
La llamada al sistema sysinfo llena una estructura con las estadísticas del sistema. Su único argumento es un puntero a una estructura sysinfo. Algunos de los campos más interesantes de struct sysinfo que se llenan son los siguientes:
1) el tiempo de actividad en tiempo transcurrido desde que el sistema arranca, en segundos
2) disponibles de RAM física-totalram total
3) -freeram gratuito RAM física
4) procs-El número de procesos en el sistema
8) setitimer : Ajuste de intervalo Timers
La llamada al sistema setitimer es una generalización de la llamada de alarma. Se programa la entrega de una señal en algún momento en el futuro después de una cantidad fija de tiempo ha transcurrido
Un programa puede establecer tres tipos de temporizadores con setitimer:.
Si el código del temporizador es ITIMER_REAL, la proceso se envía una señal SIGALRM una vez transcurrido el tiempo del reloj de pared especificado.
Si el código del temporizador es ITIMER_VIRTUAL, el proceso se envía una señal SIGVTALRM después de que el proceso se ha ejecutado para la time.time especificada en el cual el proceso es no ejecutar (es decir, cuando el núcleo u otro proceso está en marcha) no se cuenta.
Si el código del temporizador es ITIMER_PROF, el proceso se envía una señal SIGPROF cuando ha transcurrido el tiempo especificado, ya sea durante propia ejecución del proceso o la ejecución de una llamada al sistema en nombre del proceso.
El primer argumento para setitimer es el código de contador de tiempo, especificando qué temporizador para fijar.
El segundo argumento es un puntero a una estructura itimerval objeto especificando la nueva . ajustes para ese timer.The tercer argumento, si no nulo, es un puntero a otro objeto itimerval estructura que reciba los ajustes del temporizador de edad
Una estructura itimerval var iable tiene dos campos:
it_value es una estructura timeval campo que contiene el tiempo hasta que el temporizador próxima expira y se envía una señal. Si es 0, el temporizador se desactiva.
It_interval es otro campo timeval estructura que contiene el valor al que el temporizador se restablece después de que caduque. Si es 0, el temporizador se desactivará después de que caduque. Si es distinto de cero, el temporizador expira repetidamente después de este intervalo
9) sendfile :. Rápida transferencia de datos
La llamada al sistema sendfile proporciona un mecanismo eficaz para la copia de datos de un descriptor de archivo para another.The descriptores de archivo pueden estar abiertas a los archivos del disco, tomas de corriente y otros dispositivos.
Usando sendfile, el tampón intermedio puede ser eliminado. Llame sendfile, pasando el descriptor de archivo para escritura, el descriptor para leer, un puntero a una variable
compensar poder, y el número de bytes a transfer.The compensado variable contiene el desplazamiento en el archivo de entrada a partir del cual la lectura debe comenzar (0 indica el comienzo del archivo) y
se actualiza a la posición en el archivo después de que el valor de retorno transfer.The es el número de bytes transferidos. Incluir