Sistemas operativos modernos

6.1.7 Ejemplo de programa que usa llamadas al sistema de archivos En esta sección examinaremos un sencillo programa en UNIX que copia un archivo de su ar­ chivo de origen a su archivo de destino. El listado aparece en la figura 6-5. El programa tiene funcionalidad mínima y sus informes de errores son más rudimentarios aún, pero da una idea razonable de cómo funcionan algunas de las llamadas al sistema relacionadas con archivos. El programa, copiarch, puede invocarse, por ejemplo, con la línea de comandos copiarch abe xyz para copiar el archivo abe en xyz. Si xyz ya existe, se sobrescribe; si no, se crea. El programa debe invocarse exactamente con dos argumentos, ambos nombres de archivo válidos. Las cuatro instrucciones ^nclude cerca de la parte superior del programa hacen que se in­ cluya un gran número de definiciones y prototipos de función en el programa. Son necesarios para que el programa se ajuste a las normas internacionales pertinentes, pero no nos ocupare­ mos más de ellos. La siguiente línea es un prototipo de función para main, algo que exige el ANSI C, pero que tampoco es importante para nuestros fines. La primera instrucción ^define es una definición de macro que especifica la cadena BUF_S1ZE como una macro que se expande al número 4096. El programa leerá y escribirá en porciones de 4096 bytes. Se considera buena práctica de programación asignar nombres a las constantes de es­ te tipo y usar los nombres en lugar de las constantes. Esta convención no sólo facilita la lectura de los programas, también facilita su mantenimiento. La segunda instrucción ^define determina quién puede tener acceso al archivo de salida. El programa principal se llama main y tiene dos argumentos, argc y argv. Éstos los pro­ porciona el sistema operativo cuando se invoca al programa. El primero indica cuántas cade­ nas estaban presentes en la línea de comandos que invocó el programa, incluido el nombre del programa. En este caso deberá ser 3. El segundo parámetro es un arreglo de apuntadores a los argumentos. En el ejemplo de llamada dado aquí, los elementos de dicho arreglo contendrían apuntadores a los valores siguientes: argv[ 0 ] = “copiarch” argv[ 1 ] = “abe” argv[ 2 ] = “xyz” Por medio de este arreglo el programa tiene acceso a sus argumentos. Se declaran cinco variables. Las dos primeras, i n j d y out_fd, contienen los descriptores de archivo, números enteros pequeños que se devuelven cuando se abre un archivo. Las dos siguientes, rd_count y wt_count, son los conteos de bytes devueltos por las llamadas al siste­ ma read y write, respectivamente. La última, buffer, es el búfer empleado para contener los da­ tos leídos y suministrar los datos a escribir. La primera instrucción propiamente dicha verifica si argc es 3. Si no, termina el programa con el código de estado 1. Cualquier código de estado distinto de Oimplica que hubo un error.

RkJQdWJsaXNoZXIy MjI4NDcx