GRUPO DE LLAMADAS DOSxxx (1)
(Sistema de ficheros)


DosBeep

DosBeep activa el altavoz interno.

#define INCL_BASE
#include <os2.h>

ULONG ulFrequency;
ULONG ulDuration;
APIRET rc; /* Codigo de error */

rc = DosBeep(ulFrequency, ulDuration);

Parámetros

ulFrecuencyFrecuencia en hertzios (ciclos por segundo) en el rango 25 a 7FFF (ambos en hexadecimal).
ulDurationDuración del sonido en milisegundos.

Codigos de error

0Sin error
395Frecuencia no válida


DosClose

DosClose cierra un handle a un fichero, cauce o dispositivo.

#define INCL_BASE
#include <os2.h>

HFILE fileHandle;
APIRET rc; /* Codigo de error */

rc = DosClose(FileHandle);

Parámetros

FileHandleUn HANDLE asignado a un fichero, cauce o dispositivo físico.

Codigos de error

0Sin error
2Fichero no encontrado
5Acceso denegado
6HANDLE no valido


DosCopy

DosCopy copia el contenido de un fichero o subdirectorio al fichero o subdirectorio de destino.

#define INCL_BASE
#include <os2.h>

PSZ pszFicheroOrigen;
PSZ pszFicheroDestino;
ULONG ulModoOp;
APIRET rc; /* Codigo de error */

rc = DosCopy(pszFicheroOrigen, pszFicheroDestino,ulModoOp);

Parámetros

pszFicheroOrigenPuntero a una cadena con el path del fichero origen. La barra derecha (/) y la invertida (\) pueden ser usadas indistintamente.
pszFicheroDestinoPuntero a una cadena con el path del fichero destino. La barra derecha (/) y la invertida (\) pueden ser usadas indistintamente.
ulModoOpDoble palabra de bits que define el modo de funcionamiento de la funcion.
Bit Descripción
31-3 Reservado. Debe ser cero
2 0: Descarta los EAs (Atributos extendidos) si el sistema de ficheros de destino no los soporta.

1: Devuelve un error si el sistema de ficheros de destino no soporta EAs y el fichero a copiar los tiene.

1 0: Sustituye el fichero destino por el fichero origen.

1: Añade el fichero origen al final del fichero destino.

Es ignorado si el directorio o fichero de destino no existe.

0 0: Si el fichero destino ya existe, devuelve un error.

1: Copia el fichero fuente incluso si ya existe el fichero destino.

Codigos de error

0Sin error
2Fichero no encontrado
3Path no encontrado
5Acceso denegado
26Disco sin sistema de ficheros
32Violación de compartición
36Desbordamiento del buffer de compartición
87Parámetro no valido
108Unidad bloqueada
112Disco lleno
206Nombre de fichero demasiado largo
267Directorio incorrecto
282EAs no soportados en la unidad
283Hay EAs importantes


DosCreateDir

DosCreateDir crea un nuevo directorio.

#define INCL_BASE
#include <os2.h>

PSZ pszDirName;
EAOP2 pEABuf;
APIRET rc; /* Codigo de error */

rc = DosCreateDir(pszDirName, pEABuf);

Parámetros

pszDirNameUn puntero a una cadena con el nombre del directorio a crear. Puede ir acompañado de un path y una unidad. Si ésta no es especificada, se toma la unidad actual. La barra derecha (/) y la invertida (\) pueden ser usadas indistintamente.
pEABufContiene información sobre los atributos extendidos que puede contener dicho directorio. Si no van a ser definidos o modificados, debe ser puesto a NULL.

Codigos de error

0Sin error
3Path no encontrado
5Acceso denegado
26Disco sin sistema de ficheros
87Parametro no válido
108Unidad bloqueada
206Nombre de fichero demasiado largo
254Nombre de EA no válido
255Lista de EAs inconsistente
Valor de EA no soportado


DosDelete

DosDelete borra un fichero. Este puede ser recuperado.

#define INCL_BASE
#include <os2.h>

PSZ pszFileName;
APIRET rc; /* Codigo de error */

rc = DosDelete(pszFileName);

Parámetros

pszFileNameUn puntero a una cadena con el nombre del fichero a borrar. Puede ir acompañado de un path y una unidad. Si ésta no es especificada, se toma la unidad actual. La barra derecha (/) y la invertida (\) pueden ser usadas indistintamente.

Codigos de error

0Sin error
2Fichero no encontrado
3Path no encontrado
5Acceso denegado
26Disco sin sistema de ficheros
32Violación de compartición
36Desbordamiento del buffer de compartición
87Parámetro no valido
206Nombre de fichero demasiado largo


DosDeleteDir

DosDeleteDir borra un directorio. Es necesario que esté vacío.

#define INCL_BASE
#include <os2.h>

PSZ pszDirName;
APIRET rc; /* Codigo de error */

rc = DosDeleteDir(pszFileName);

Parámetros

pszDirNameUn puntero a una cadena con el nombre del directorio a borrar. Puede ir acompañado de un path y una unidad. Si ésta no es especificada, se toma la unidad actual. La barra derecha (/) y la invertida (\) pueden ser usadas indistintamente.

Codigos de error

0Sin error
2Fichero no encontrado
3Path no encontrado
5Acceso denegado
16Intenta borrar el directorio actual
26Disco sin sistema de ficheros
87Parámetro no valido
108Unidad bloqueada
206Nombre de fichero demasiado largo


DosFindClose

DosFindClose cierra un cauce de busqueda de ficheros abierto con DosFindFirst; esto es, termina una búsqueda.

#define INCL_BASE
#include <os2.h>

HDIR hdirDirHandle;
APIRET rc; /* Codigo de error */

rc = DosFindClose(hdirDirHandle);

Parámetros

hdirDirHandleUn handle asignado por una llamada a DosFindFirst, o usado en una llamada a DosFindNext.

Codigos de error

0Sin error
6HANDLE no valido


DosFindFirst

DosFindFirst busca el primer archivo de un directorio que coincide con el patrón de búsqueda.

#define INCL_BASE
#include <os2.h>

PSZ pszFileName;
PHDIR phdirDirHandle;
ULONG ulAttribute;
PVOID pResultBuf;
ULONG ulResultBufLen;
PULONG pSearchCount;
ULONG ulFileInfoLevel;
APIRET rc; /* Codigo de error */

rc = DosFindFirst(pszFileName, phdirDirHandle, ulAttribute, pResultBuf, ulResultBufLen, pSearchCount, ulFileInfoLevel);

Parámetros

pszFileNamePuntero a una cadena ASCIIZ que define el criterio de busqueda
phdirDirHandlePuntero a un handle, donde OS/2 almacenará el handle correspondiente a la busqueda en curso. Si antes de la llamada, contiene h'00000001, el sistema asigna el handle a la salida estandar. Si contiene h'FFFFFFFF, OS/2 devuelve un handle nuevo.
ulAttributeCampo de bits que determina los tipos de archivos que se deben buscar.
Bit Descripción
31-14 Reservados. Deben ser cero.
13 1: los ficheros que no tienen activo el bit de ARCHIVO son ignorados.

0: son buscados también los ficheros que no tienen activo el bit de ARCHIVO.

12 1: los ficheros que no tienen activo el bit de DIRECTORIO son ignorados.

0: son buscados también los ficheros que no tienen activo el bit de DIRECTORIO

11 Reservado. Debe ser cero.
10 1: los ficheros que no tienen activo el bit de SISTEMA son ignorados.

0: son buscados también los ficheros que no tienen activo el bit de SISTEMA

9 1: los ficheros que no tienen activo el bit de OCULTO son ignorados.

0: son buscados también los ficheros que no tienen activo el bit de OCULTO

8 1: los ficheros que no tienen activo el bit de SOLO_LECTURA son ignorados.

0: son buscados también los ficheros que no tienen activo el bit de SOLO_LECTURA

7-6 Reservados. Deben ser cero.
5 1: incluye los ficheros que tienen activo el bit de ARCHIVO.

0: excluye los ficheros que tienen activo el bit de ARCHIVO.

4 1: incluye los ficheros que tienen activo el bit de DIRECTORIO.

0: excluye los ficheros que tienen activo el bit de DIRECTORIO.

3 Reservado. Debe ser cero.
2 1: incluye los ficheros que tienen activo el bit de SISTEMA.

0: excluye los ficheros que tienen activo el bit de SISTEMA.

1 1: incluye los ficheros que tienen activo el bit de OCULTO.

0: excluye los ficheros que tienen activo el bit de OCULTO.

0 1: incluye los ficheros que tienen activo el bit de SOLO_LECTURA.

0: excluye los ficheros que tienen activo el bit de SOLO_LECTURA.

pResultBufPuntero al buffer en donde se almacenarán los resultados de la búsqueda.
ulResultBufLenContiene la longitud, en bytes, de ResultBuf
pSearchCountPuntero a una variable de cuenta de coincidencias. Al hacer la llamada, esta variable debe contener el número máximo de entradas que se quieren leer en ResultBuf. Al retornar, contiene el número de entradas que hay realmente.
ulFileInfoLevelEspecifica el nivel de información que se desea:
1 es el nivel estandar. Con 2 y 3 se accede a los EAs.

Codigos de error

0Sin error
2Fichero no encontrado
3Path no encontrado
6HANDLE no valido
18No hay más ficheros
26Disco sin sistema de ficheros
87Parámetro no valido
108Unidad bloqueada
111Desbordamiento del buffer
113No hay más handles de busqueda
206Nombre de fichero demasiado largo
208Meta-expansion demasiado larga
254Nombre de EA no válido
275EAs no coinciden


DosFindNext

DosFindNext encuentra el siguiente archivo de un directorio que coincide con la cadena de busqueda dada en un DosFindFirst. Al usarse un handle para identificar la búsqueda, se pueden hacer varias simultáneamente.

#define INCL_BASE
#include <os2.h>

HDIR hdirDirHandle;
PVOID pResultBuf;
ULONG ulResultBufLen;
PULONG pSearchCount;
APIRET rc; /* Codigo de error */

rc = DosFindNext (hdirDirHandle, pResultBuf, ulResultBufLen, pSearchCount);

Parámetros

hdirDirHandleHandle de busqueda, proporcionado por DosFindFirst.
pResultBufPuntero al buffer donde almacenará las coincidencias encontradas.
ulResultBufLenLa longitud en bytes de ResultBuf.
pSearchCountAntes de la llamada, debe contener el número máximo de encuentros que se deben almacenar en el buffer a la vez. Al retornar, contentrá el número de coincidencias que realmente se han encontrado.

Codigos de error

0Sin error
6HANDLE no valido
18No hay más ficheros
26Disco sin sistema de ficheros
87Parámetro no valido
111Desbordamiento del buffer
275EAs no coinciden


DosForceDelete

DosForceDelete borra un fichero, de forma que es irrecuperable.

#define INCL_BASE
#include <os2.h>

PSZ pszFileName;
APIRET rc; /* Codigo de error */

rc = DosForceDelete(pszFileName);

Parámetros

pszFileNamePuntero a una cadena con el nombre del fichero a borrar. Puede ir acompañado de un path y una unidad. Si ésta no es especificada, se toma la unidad actual. La barra derecha (/) y la invertida (\) pueden ser usadas indistintamente.

Codigos de error

0Sin error
2Fichero no encontrado
3Path no encontrado
5Acceso denegado
26Disco sin sistema de ficheros
32Violación de compartición
36Desbordamiento del buffer de compartición
87Parámetro no valido
206Nombre de fichero demasiado largo


DosMove

DosMove mueve un fichero de un directorio a otro distinto.

#define INCL_BASE
#include <os2.h>

PSZ pszOldPathName;
PSZ pszNewPathName;
APIRET rc; /* Codigo de error */

rc = DosMove(pszOldPathName, pszNewPathName);

Parámetros

pszOldPathNamePuntero a una cadena con el nombre del fichero a mover. Puede ir acompañado de un path. La barra derecha (/) y la invertida (\) pueden ser usadas indistintamente.
pszNewPathNamePuntero a una cadena con el nuevo nombre del fichero. Puede ir acompañado de un path. La barra derecha (/) y la invertida (\) pueden ser usadas indistintamente.

Codigos de error

0Sin error
2Fichero no encontrado
3Path no encontrado
5Acceso denegado
17Los dispositivos fuente y destino son distintos
26Disco sin sistema de ficheros
32Violación de compartición
36Desbordamiento del buffer de compartición
87Parámetro no valido
108Unidad bloqueada
206Nombre de fichero demasiado largo
250Fichero origen y destino son el mismo
251El directorio destino está dentro del fuente


DosOpen

DosOpen abre un fichero nuevo o uno ya existente para trabajar con él.

#define INCL_BASE
#include <os2.h>

PSZ pszFileName;
PHFILE pshfFileHandle;
PULONG pActionTaken;
ULONG ulFileSize;
ULONG ulFileAttribute;
ULONG ulOpenFlag;
ULONG ulOpenMode;
PEAOP2 pEABuf;
APIRET rc; /* Codigo de error */

rc = DosOpen(pszFileName, pshfFileHandle, pActionTaken, ulFileSize, ulFileAttribute, ulOpenFlag, ulOpenMode, pEABuf);

Parámetros

pszFileNamePuntero a una cadena con el nombre del fichero a abrir. Puede ir acompañado de un path. La barra derecha (/) y la invertida (\) pueden ser usadas indistintamente.
pshfFileHandlePuntero a una variable donde OS/2 almacenará el handle asignado al fichero.
pActionTakenPuntero a una variable donde OS/2 almacenará un valor que indica la acción tomada por DosOpen. Si la función falla, este valor no tiene significado.
Valor Definición
1 El fichero existía
2 El fichero fue creado (no existía)
3 El fichero fue truncado (existía y fue reescrito)
ulFileSizeNuevo tamaño lógico (fin de fichero, EOF) en bytes. Este parámetro solo es válido cuando se crea un nuevo fichero o se reescribe uno. En otro caso es ignorado. Es un error crear o reemplazar un fichero con una longitud distinta de cero si el modo de apertura está puesto en SOLO_LECTURA
ulFileAttributeDoble palabra conteniendo el siguiente mapa de bits. Solo es válido si el fichero es creado.
Bit Descripción
31-6 Reservados. Deben ser cero.
5 El fichero ha sido archivado (bit ARCHIVO activo)
4 El fichero es un subdirectorio.
3 Reservado. Debe ser cero.
2 El fichero es un archivo de sistema.
1 El fichero es oculto y no aparece en una lista del directorio.
0 El fichero puede ser leido, pero no escrito. SOLO_LECTURA.
0 Si está desactivado, el fichero puede ser leido y escrito.
ulOpenFlagCampo de bits de doble palabra que indica la acción a tomar en caso de que exista o no el fichero.
Bits Descripción
31-8 Reservados. Deben ser cero.
7-4 0000: Abre un fichero que ya existe; falla si no existe.
0001: Abre un fichero si existe; lo crea el fichero si no existe.
3-0 0000: Crea el fichero. Falla si ya existe.
0001: Abre el fichero si ya existe.
0010: Abre el fichero; si ya existe lo reescribe.
ulOpenModeCampo de bits de doble palabra que describe el modo de operación de la función.
Bit Descripción
31-16 Reservado. Debe ser cero.
15 Apertura directa:
0: FileName representa un fichero para ser abierto normalmente.
1: FileName es 'unidad' (como C: o A:), y representa una unidad de disco o disquete para ser abierta para un acceso directo.
14 0: Las escrituras en el fichero son a través de la cache de disco. El sistema de ficheros escribe los sectores cuando ésta se llena o el fichero es cerrado.
1: Las escrituras en el fichero son a través de la cache de disco, pero los sectores son escritos antes del retorno de una llamada de escritura síncrona. Este estado del fichero lo define como un archivo síncrono.
13 Bit de notificación de errores físicos.
0: Los errores van a través del manejador del sistema.
1: Los errores son notificados al thread que hizo la llamada a través de un código de retorno.
12 0: El driver de disco puede poner datos de las operaciones de I/O en su cache.
1: Las operaciones de I/O al fichero no deben ser realizadas a través del cache del sistema de ficheros.
11 Reservado. Debe ser cero.
10-8 Especifica el modo en que se va a acceder al fichero, de cara a la colocación de los datos en el disco:
000: Sin un modo concreto.
001: Principalmente acceso secuencial.
010: Principalmente acceso aleatorio.
011: Aleatorio concentrado en zonas concretas.
7 0: El handle del fichero puede ser heredado por procesos creados con DosExecPgm.
1: El handle del fichero es privado, y solo accesible por el proceso actual.
6-4 Modos de compartición del fichero:
001: DENY_ALL; no se permite que otros procesos accedan.
010: DENY_WRITE; otros procesos pueden abrirlo para lectura, pero no para escritura.
011: DENY_READ; otros procesos pueden abrirlo para escritura, pero no para lectura.
100: DENY_NONE; otros procesos pueden abrirlo para lectura y para escritura.
3 Reservado. Debe ser cero.
2-0 Modo de acceso. Define como va a acceder el proceso que ha abierto el fichero:
000: READ_ONLY; solo va a realizar operaciones de lectura.
001; WRITE_ONLY; solo va a realizar operaciones de escritura.
010; READ_WRITE; va a realizar operaciones de lectura y escritura.
pEABufPuntero a una variable de EAs. Antes de hacer la llamada, debe contener una estructura de atributos extendidos. A la salida, no hay cambios en ella. Si no se van a definir o modificar atributos extendidos, pEABuf debe apuntar a cero.

Codigos de error

0Sin error
2Fichero no encontrado
3Path no encontrado
4Demasiados archivos abiertos
5Acceso denegado
12Modo de acceso no valido
26Disco sin sistema de ficheros
32Violación de compartición
36Desbordamiento del buffer de compartición
82No se puede crear fichero
87Parámetro no valido
99Dispositivo en uso
108Unidad bloqueada
110Fallo en la apertura
112Disco lleno
206Nombre de fichero demasiado largo
231Cauce (pipe) ocupado.


DosQueryCurrentDir

DosQueryCurrentDir devuelve el path completo del directorio actual para el proceso que realiza la llamada. Es necesario indicar una unidad, pues para cada una de ellas hay un path distinto.

#define INCL_BASE
#include <os2.h>

ULONG ulDriveNumber;
PBYTE pbDirPath;
PULONG pDirPathLen;
APIRET rc; /* Codigo de error */

rc = DosQueryCurrentDir(ulDriveNumber, pbDirPath, pDirPathLen);

Parámetros

ulDriveNumberNumero de unidad. El valor 0 indica la unidad actual, 1 es la unidad A, 2 es la unidad B, 3 la unidad C, etc.
pbDirPathPuntero al buffer en donde OS/2 devolverá el path completo.
pDirPathLenPuntero a una variable. Antes de la llamada debe contener la longitud del buffer. A la salida, si ocurre un error por ser un buffer muy pequeño, contendrá la longitud mínima necesaria en bytes.

Codigos de error

0Sin error
15Unidad no válida
26Disco sin sistema de ficheros
108Unidad bloqueada
111Desbordamiento del buffer


DosQueryCurrentDisk

DosQueryCurrentDisk devuelve la unidad por defecto para el proceso que hace la llamada.

#define INCL_BASE
#include <os2.h>

PULONG pDriveNumber;
PULONG pLogicalDriveMap;
APIRET rc; /* Codigo de error */

rc = DosQueryCurrentDisk(pDriveNumber, pLogicalDriveMap);

Parámetros

pDriveNumberPuntero a una variable donde OS/2 devolverá el número de la unidad por defecto. El valor 1 es la unidad A, el 2 la unidad B, el 3 la unidad C, etc.
pLogicalDriveMapPuntero a un mapa de bits donde el sistema devuelve un mapa de las unidades lógicas disponibles. Las unidades de la A a la Z tienen cada una un bit asignado, desde el 0 al 25, del mapa. Por ejemplo, el bit 0 representa la unidad A, el 1 la unidad B, etc. El significado de dicho bit es el siguiente:
Valor Definición
0 La unidad lógica no existe
1 La unidad lógica sí existe

Codigos de error

0Sin error


DosRead

DosRead lee el número especificado de bytes a un buffer, desde un fichero, cauce o dispositivo.

#define INCL_BASE
#include <os2.h>

HFILE FileHandle;
PVOID pBufferArea;
ULONG ulBufferLength;
PULONG pBytesRead;
APIRET rc; /* Codigo de error */

rc = DosRead(FileHandle, pBufferArea, ulBufferLength, pBytesRead);

Parámetros

FileHandleHandle obtenido de DosOpen.
pBufferAreaPuntero a un buffer donde recibir los bytes leidos.
ulBufferLengthLongitud en bytes del buffer. Es el número de bytes a leer.
pBytesReadPuntero a una variable donde OS/2 escribe el número de bytes leidos realmente.

Codigos de error

0Sin error
5Acceso denegado
6HANDLE no valido
26Disco sin sistema de ficheros
33Violación del bloqueo
109El cauce (pipe) está cerrado
234Demasiados datos


DosResetBuffer

DosResetBuffer escribe los buffers de escritura del fichero indicado. Cuando se escriben caracteres en un fichero, estos son almacenados en un buffer de, al menos, un sector, el cual se escribe cuando se llena o cuando se cierra el fichero. Esta llamada fuerza una escritura de dicho buffer aun cuando no esté lleno.

#define INCL_BASE
#include <os2.h>

HFILE FileHandle;
APIRET rc; /* Codigo de error */

rc = DosResetBuffer(FileHandle);

Parámetros

FileHandleUn handle al fichero cuyo buffer se quiere almacenar.

Codigos de error

0Sin error
2Fichero no encontrado
5Acceso denegado
6HANDLE no valido


DosScanEnv

DosScanEnv busca una variable de entorno (asignada con SET en el CONFIG.SYS o desde la línea de comandos) y devuelve su contenido.

#define INCL_BASE
#include <os2.h>

PSZ pszEnvVarName;
PSZ pszResultPointer;
APIRET rc; /* Codigo de error */

rc = DosScanEnv(pszEnvVarName, &pszResultPointer);

Parámetros

pszEnvVarNamePuntero a una cadena con la variable de entorno a buscar. No se debe incluir el signo igual (=) pues no es parte del nombre.
pszResultPointerPuntero a una variable donde el sistema devuelve un puntero a una cadena con el contenido de la variable de entorno. ResultPointer apunta al primer caracter de dicha cadena.

Codigos de error

0Sin error
203Variable de entorno no encontrada


DosSetCurrentDir

DosSetCurrentDir permite cambiar el directorio por defecto. Solo afecta al proceso que realiza la llamada.

#define INCL_BASE
#include <os2.h>

PSZ pszDirName;
APIRET rc; /* Codigo de error */

rc = DosSetCurrentDir(pszDirName);

Parámetros

pszDirNamePuntero a una cadena con el nuevo Path.

Codigos de error

0Sin error
2Fichero no encontrado
3Path no encontrado
5Acceso denegado
8No hay suficiente memoria
26Disco sin sistema de ficheros
87Parámetro no valido
108Unidad bloqueada
206Nombre de fichero demasiado largo


DosSetDefaultDisk

DosSetDefaultDisk cambia la unidad por defecto. Solo afecta al proceso que hace la llamada.

#define INCL_BASE
#include <os2.h>

ulDriveNumber;
APIRET rc; /* Codigo de error */

rc = DosSetDefaultDisk(ulDriveNumber);

Parámetros

ulDriveNumberNueva unidad por defecto. El valor 1 representa a la unidad A, 2 es la unidad B, 3 es la unidad C, etc.

Codigos de error

0Sin error
15Unidad no válida


DosShutdown

DosShutdown graba todos los buffers del sistema, cierra los ficheros abiertos y graba la cache, preparando el sistema para apagarlo. Puede tardar varios segundos en ejecutarse.

#define INCL_BASE
#include <os2.h>

ULONG ulReserved;
APIRET rc; /* Codigo de error */

rc = DosShutdown(ulReserved);

Parámetros

ulReservedDoble palabra. Debe valer cero.

Codigos de error

0Sin error
87Parámetro no valido
274Ya se está ejecutando un ShutDown


DosWrite

DosWrite escribe un determinado grupo de bytes desde un buffer al fichero especificado.

#define INCL_BASE
#include <os2.h>

HFILE FileHandle;
PVOID pBufferArea;
ULONG ulBufferLength;
PULONG pBytesWritten;
APIRET rc; /* Codigo de error */

rc = DosWrite(FileHandle, pBufferArea, ulBufferLength, pBytesWritten);

Parámetros

FileHandleContiene un handle obtenido con DosOpen
pBufferAreaPuntero al buffer que contiene los datos a escribir
ulBufferLengthNumero de bytes a escribir
pBytesWrittenPuntero a una variable donde OS/2 devolverá el número de bytes escritos realmente

Codigos de error

0Sin error
5Acceso denegado
6HANDLE no valido
19El sistema es de solo lectura o está protegido contra escritura
26Disco sin sistema de ficheros
29Ha fallado la escritura
33Violación del bloqueo
109El cauce (pipe) está cerrado

 Indice