* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

                            Manual del Programador

                                Unix System V 

                               (Junio de 1974)

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

	PREFACIO

La cantidad de instalaciones de UNIX es ahora superior a 50, y se
esperan muchas mas. Ninguna de esta tiene el mismo complemento exacto de
hardware y software. Por lo tanto, es bastante posible que este manual
no cubra la inforamción apropiada para las instalaciones particulares.

Los autores están agradecidos a Lorinda L. Cherry, L. A. Dimino, R. C.
Haight, S. C. Johnson, Brian W. Kernighan, M. E. Lesk, y E. N. Pinson
por sus contribuciones al software del sistema, y a L. E. McMahon por
sus contribuciones al software y a este manual. Somos apreciativos
particularmente de los esfuerzos técnicos, editoriales y administrativos
de J. F. Ossanna, M. D. Mcllroy, y R. Morris. Todos contribuyeron
grandemente al plantel de software UNIX y a este manual.

Su inventiva, criticismo constructivo y apoyo irrestricto incrementó
inmensamente nó solo cualquier éxito que podría contar el sistema UNIX,
sino también nuestro disfrute en su creación.



Iniciar Sesión ("LOGIN")

Debe llamar a UNIX desde un terminal apropiado. UNIX puede ser utilizado
desde terminales ASCII tipificadas por la TTY 37, la GE TermiNet 300, o
la Memorex 1240, y varias terminales gráficas. También deberá contar con
un Nombre de Usuario válido, que puede ser obtenido - junto con el
número telefónico - por el administrador de sistema. El mismo número
telefónico sirve a las terminales que operan a las velocidades
estándares. Luego de establecer la conexión de datos, el procedimiento
de inicio de sesión dependerá del tipo de terminal que utilice:

    - Terminales de 300 baudios. Tales terminales incluyen a la GE
    Terminet 300, la mayoría de las terminales de presentación en
    pantalla, Execuport, TI, y ciertas terminales Anderson-Jaconson.
    Estas terminales generalmente cuentan con un conmutador de velocidad
    que debe ser colocado en "300" (or "30" por 30 caracteres por
    segundo), y un interruptor de half/full dúplex, que debe ser
    colocado en "full-dúplex". (note que este conmutador a menudo deberá
    ser cambiado ya que muchos otros sistemas requieren half-dúplex). Al
    establecer la conexión, el sistema tipea "login:"; usted debe
    mecanografiar su nombre de usuario, segudo por la tecla "RETURN". Si
    cuenta con una contraseña, el sistema la solicitará y desconectará
    la impresora de la terminal de modo que su contraseña no quede
    impresa. Luego de que ha iniciado sesión, las teclas "RETURN", "NEW
    LINE" o "LINEFEED" obtendrán exactamente el mismo resultado.
    
    (Nota: en las teletipos estas tres teclas normalmente ofrecen
    resultados diferentes, la primera retorna el carro del impresor al
    principio de la línea de mecanografía, la segunda baja una línea
    nueva de mecanografiado, y la tercera transmite el contenido de la
    línea escrita actual a la línea de comunicación).

    - Terminal TTY 37: Cuando ha establecido una conexión de datos, el
    sistema imprimirá algunos caracteres basura (el mensaje "login:" a
    la velocidad de transmisión incorrecta). Presione la tecla "BREAK"
    (o "INTERRUPT"); estas producen una señal independiente de la
    velocidad de sincronismo y la envían a UNIX, significando con ello
    que está en uso una terminal de 150 baudios. El sistema imprimirá
    entonces "login:", esta vez a la velocidad de transmisión correcta;
    usted deberá responder con su nombre de usuario. Desde la terminal
    TTY 37 y cualquier otra cuya función "NEW-LINE" combine la acción de
    RETURN y LINE FEED), se terminará cada nueva línea que haya
    mecanografiado con la tecla "NEW-LINE" (no la tecla "RETURN").


En todas estas terminales es importante mecanografíar su nombre en
minúsculas de ser posible; si lo mecanografía en letras mayúsculas, UNIX
asumirá que su terminal es incapaz de generar letras en minúsculas y
traducirá todas las mayúsculas subsiguientes a letras minúsculas.

El inicio de sesión exitoso resultará evidenciado con un "%" que el
programa Shell imprimirá para usted (el Shell se describe en la sección
"Cómo ejecutar un programa").

Para mas información consulte getty (VIII), que discute la secuencia de
inicio de sesión en mayor detalle, y tty (IV), que discute la E/S de la
terminal impresora.



Cerrar sesión ("LOGOUT")

Existen tres maneras de cerrar sesión:

    - Puede simplemente colgar el teléfono.
    
    - Puede cerrar la sesión enviando una indicación de EOF (Caracter
    ASCII EOF, Ctrl+d) al programa Shell. El Shell finalizará y
    aparecerá nuevamente el mensaje "login:".
    
    - También puede abrir sesión directamente como otro usuario,
    introduciendo el comando login (I).

    
Cómo comunicarse a través de la terminal

Cuando le mecanografíe a UNIX, un gnomo oculto en las profundidades del
sistema recolectará sus caracteres y los almacenara en un lugar secreto.
Estos caracteres no le serán ofrecidos a un programa dado hasta que
presione la tecla "RETURN" (o "NEW-LINE"), como se describió
anteriormente en Iniciar Sesión.

La Entrada/Salida de la terminal UNIX es full-dúplex. Cuenta con lectura
anticipada completa, lo que significa que podrá mecanografiar en
cualquier momento dado, incluso si un programa le está mecanografiando a
usted. Por supuesto, si tipea mientras se produce la impresión hacia
usted, dicha impresión resultará realizada con caracteres interepuestos.
Sin embargo, cualquier cosa que mecanografíe resultará almacenado e
interpretado en la secuencia correcta pensada (sin importar lo que
resulte impreso). Existe cierto límite de la cantidad de caracteres que
pueden resultar almacenados anticipadamente, pero esta cantidad es
generosa, por lo que es improbableble que la exceda, a no ser que el
sistema se encuentre en problemas. Cuando exceda el límite de lectura
anticipada, el sistema UNIX descartará todos los caracteres almacenados.

En la línea de entrada del terminal teletipo, el caracter "@" mata todos
los caracteres mecanografiado previamente a él, de modo que los errores
de mecanografiado pueden ser reparados en una sola línea gracias a su
utilización. Asimismo, el caracter "#" borrará el último caracter
mecanografiado.

Los usos sucesivos de "#" borranm los caracteres hacia atrás, pero no
más allá del comienzo de la línea. Es posible enviar "@" y "#" al
programa si los precede con una "\". (de modo que para borrar una "\",
debererá utilizar dos "#"s).

El caracter ASCII "DELETE" (también conocido como RUBOUT") no es enviado
a los programas, sino que genera una señal de interrupción. Esta señal
generalmente provoca que el programa que esté ejecutando resulte
terminado. Es utilizada típicamente para detener una impresión larga
indeseada. Suele ser común que ciertos programas acepten o
alternativamente ignoren dicha señal, o bien podrían ser notificados al
recibirla (en lugar de terminar su ejecución). El editor - por ejemplo -
intercepta dichas interrupciones y detiene lo que está haciendo (el
lugar de terminar el programa entero), por lo que podrá utilizar una
interrupción para detener la salida de impresión del editor sin perder
por ello el fichero que se encuentra editando.

La señal QUIT se genera mecanografiando el caracter ASCII FS.  Esto no
sólo provoca que el programa en ejecución termine, sino que también
genera un fichero con la imagen del núcleo (NdT: volcado de memoria RAM,
o núcleo) del proceso terminado. Esto es bastante útil para labores de
depurado.

Además de adaptarse a la velocidad de la terminal teletipo, UNIX también
intenta de resultar inteligente al determinar si posee una terminal con
la función de nueva línea, o si esta función debe ser simulada con la
conjunción de retorno de carro y alimentar línea. En este último caso,
todos los RETORNO DE CARRO recibidos como entrada son convertidos a
caracteres de ALIMENTACIÓN DE LÍNEA (el delimitador estándar de línea),
y se hace eco a la terminal tanto de un caracter de retorno de carro
como uno de alimentación de línea. Si está en el modo incorrecto, el
comando stty (I) lo rescatará.

Los caracteres de TABULADO son utilizados libremente en el código fuente
de los programas de UNIX. Si su terminal no tiene la función de
tabulado, podrá arreglar que estos se conviertan en espacios durante la
entrada, y recibir su eco como espacios durante la salida. El sistema
asume que los TABULADO son enviados cada ocho columnas en blanco.
Nuevamente, el comando stty (I) podrá activar o desactivar este modo.
También, existe un fichero el cual, si resulta impreso en terminales TTY
37 o TermiNet 300, configurará las tabulaciones de forma correcta (tabs
(VII)).

La sección tty (IV) discute las E/S de teletipo más en detalle. La
sección kl (IV) discute la consola de teletipo.


Cómo correr un programa: el Shell.

Una vez que ha iniciado una sesión exitosamente a UNIX, un programa
llamado Shell comenzará a escuchar a su terminal. El Shell lee las
líneas mecanografiadas, las divide en un nombre de órden y sus
argumentos, y ejecuta dicha órden. Una órden es simplemente un programa
ejecutable. El Shell busca primero en su directorio actual (ver sección
siguiente) un programa con el nombre dado, y si no existe ninguno allí,
lo buscará en el directorio de sistema. No hay nada especial en las
órdenes provistas por el sistema a excepción de que se mantienen
almacenadas en un directorio en el cual el Shell puede encontrarlos.

El nombre de órden es siempre la primer palabra de la línea ingresada;
ella y sus argumentos están separadas entre sí por espacios en blanco.
Cuando un programa terminal, el Shell recibe nuevamente el control
ordinario, e imprime un "%" para indicarle que se encuentra listo para
recibir otra órden.

El Shell tiene muchas otras capacidades, que se describen en detalle en
la sección sh (I).

El Directorio Actual.

UNIX tiene un sistema de archivado ordenado siguiendo una jerarquía de
directorios. Cuando el dministrador de sistema le otorgue un nombre de
usuario, también creará un directorio para usted (ordenariamente, con el
mismo nombre que su nombre de usuario). Cuando usted inicie sesión,
cualquier nombre de fichero que mecanografíe será dispuesto por defecto
en este directorio. Debido a que usted es el poseedor de dicho
directorio, dispondrá de permisos completos para leer, escribir, alterar
o destruir sus contenidos. Los permisos para ejercer su voluntad en
otros directorios y ficheros podrán ser otorgados o denegados por sus
respectivos poseedores. De hecho, pocos usuarios de UNIX protegen sus
ficheros de la destrucción, mucho menos mal uso, por otros usuarios.

Para cambiar al directorio actual (pero no el conjunto de permisos con
los cuales fue consagrado al iniciar sesión) use el comando chdir (I).

Nombres de Ruta. Para referirse a los ficheros que no se encuentran en
el directorio actual, debe utilizar el nombre de Ruta. Los nombres de
ruta completos comienzan con "/", el nombre del directorio de raíz de
todo el sistema de archivado. Luego de la barra sigue el nombre de cada
directorio que contiene al siguiente subdirectorio (seguido por una "/"
hasta llegar finalmente al nombre de fichero. Ejemplo: /usr/lem/ficherox
refiere al fichero ficherox en el directorio lem; lem en sí es un
subdirectorio de usr; usr nace directamente desde el directorio raíz.

Si su directorio actual cuenta con subdirectorios, el nombre de ruta de
los ficheros contenidos en él comienzan con el nombre del subdirectorio
(sin el prefijo de "/").

Sin excepción importante, un nombre de ruta puede utilizarse en
clauquiera lugar que se requiera un nombre de fichero. Los comandos
importantes para modificar los contenidos de los ficheros son cp (I), mv
(I), y rm (I), los cuales copian, mueven (también renombran) o remueven
ficheros respectivamente.  Para conocer el status de los ficheros o
direcotrios, use ls (I). Vea mkdir (I) para hacer subdirecotrios; rmdir
(I) para destruirlos.

Para una discusión más completa del sistema de archivado, vea "El
sistema de tiempo compartido UNIX", por los autores presentes, que
aparece en Communications of the ACM; también existe una versión
disponible desde la misma fuente de este manual. Puede ser útil leer la
Sección II de este manual, que discute las llamadas de sistema, incluso
si no desea incursionar con el sistema a tal nivel.

Escribir un programa

Para ingresar texto de código fuente de un programa en un fichero de
UNIX, use ed (I). Los tres lenguajes princiapels en UNIX son el lenguaje
ensamblador (ver as (I)), Fortran (ver fc (I)), y C (ver cc (I)). Luego
que ha ingresado el texto del programa a través del editor y lo ha
escrito en un fichero, puede dar el fichero al procesadro de lenguaje
apropiado como un argumento. La salida del procesador de lenguaje será
dejada en un fichero en el directorio actual llamado "a.out" (si la
salida es preciada, use mv para mudarla rápidamente hacia un nombre
menos expuesto. Si escribe en lenguaje ensamblador, probablemente
necesitará cargar el programa con las subrutinas de bibliotecas; ver ld
(I). Los otros dos procesadores de lenguajes llamarán automáticamente al
cargador.

Cuando haya atravesado este proceso sin provocar diagnósticos, podrá
ejecutar el programa resultante dando su nombre al Shell en respuesta a
venia "%".

El siguiente comando que necesitará es db (I). Como depurador, db es
mejor que el premedio para los programas de lenguaje ensamblador,
marginalmente útil para los programas en C (cuando esté terminado, cdb
(I) será un boom), y virtualmente inútil para Fortran.

Sus programas pueden recibir argumentos desde la línea de órdenes tal
como lo hacen los programas de sistema. Ver exec (II).

Procesado de Textos

Casi todo el texto ingresado al editor. Las órdenes empleadas más a
menudo para escribir texto en la terminal son cat, pr, rutt, nroff y
troff, todas detalladas en la Sección I.

El comando cat simplemente vuelca el texto en ASCII a la terminal, sin
realizar procesado alguno. La orden pr pagina el texto, provee
encabezados, y posee la facilidad de ofrecer salida de encolumnado.
Troff u ntroff son programas de formato elaborado para texto, y
requieren consideraciones cuidadosas para ingresar tanto el texto como
las órdenes de formato en el fichero de entrada. Troff conduce una
fotocomponedora de Graphic Systems; fue utilizada para producir este
manual. Nroff produce salida para una terminal teletipo. Ruff (I) es un
programa de formato de texto algo menos elaborado, y requiere menores
consideraciones previas.

Sorpresas

Ciertas órdenes proveen comunicación inter-usuario. Será bueno conocer
algo de ellas, incluso si no planeas utilizarñas, ya que alguien más
podría querer utilizarlas contigo.

Para comunicarse con otro usuario actualmente en sesión activa, se
utiliza write (I); mail (I) podrá dejar un mensaje cuya presencia será
anunciada al otro usuario la siguiente vez que inicie su sesión. Las
correcciones al manual también sugieren cómo responder a los dos
comandos si estos se utilizan para comunicarse con usted. Cuando inicie
su sesión, un "mensaje del día" podría saludarlo antes de recibir su
primer "%".