Manual de programación de OS/2/Llamadas DOSxxx del sistema de ficheros
GRUPO DE LLAMADAS DOSxxx (1) (Sistema de ficheros)
[editar]DosBeep
[editar]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 | |
---|---|
ulFrecuency | Frecuencia en hertzios (ciclos por segundo) en el rango 25 a 7FFF (ambos en hexadecimal). |
ulDuration | Duración del sonido en milisegundos. |
Códigos de error | |
---|---|
0 | Sin error |
395 | Frecuencia no válida |
DosClose
[editar]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 | |
---|---|
FileHandle | Un HANDLE asignado a un fichero, cauce o dispositivo físico. |
Códigos de error | |
---|---|
0 | Sin error |
2 | Fichero no encontrado |
5 | Acceso denegado |
6 | HANDLE no valido |
DosCopy
[editar]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 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
pszFicheroOrigen | Puntero a una cadena con el path del fichero origen. La barra derecha (/) y la invertida (\) pueden ser usadas indistintamente. | ||||||||||
pszFicheroDestino | Puntero a una cadena con el path del fichero destino. La barra derecha (/) y la invertida (\) pueden ser usadas indistintamente. | ||||||||||
ulModoOp | Doble palabra de bits que define el modo de funcionamiento de la funcion. | ||||||||||
|
Códigos de error | |
---|---|
0 | Sin error |
2 | Fichero no encontrado |
3 | Path no encontrado |
5 | Acceso denegado |
26 | Disco sin sistema de ficheros |
32 | Violación de compartición |
36 | Desbordamiento del buffer de compartición |
87 | Parámetro no valido |
108 | Unidad bloqueada |
112 | Disco lleno |
206 | Nombre de fichero demasiado largo |
267 | Directorio incorrecto |
282 | EAs no soportados en la unidad |
283 | Hay EAs importantes |
DosCreateDir
[editar]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 | |
---|---|
pszDirName | Un 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. |
pEABuf | Contiene información sobre los atributos extendidos que puede contener dicho directorio. Si no van a ser definidos o modificados, debe ser puesto a NULL. |
Códigos de error | |
---|---|
0 | Sin error |
3 | Path no encontrado |
5 | Acceso denegado |
26 | Disco sin sistema de ficheros |
87 | Parametro no válido |
108 | Unidad bloqueada |
206 | Nombre de fichero demasiado largo |
254 | Nombre de EA no válido |
255 | Lista de EAs inconsistente Valor de EA no soportado |
DosDelete
[editar]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 | |
---|---|
pszFileName | Un 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. |
Códigos de error | |
---|---|
0 | Sin error |
2 | Fichero no encontrado |
3 | Path no encontrado |
5 | Acceso denegado |
26 | Disco sin sistema de ficheros |
32 | Violación de compartición |
36 | Desbordamiento del buffer de compartición |
87 | Parámetro no valido |
206 | Nombre de fichero demasiado largo |
DosDeleteDir
[editar]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 | |
---|---|
pszDirName | Un 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. |
Códigos de error | |
---|---|
0 | Sin error |
2 | Fichero no encontrado |
3 | Path no encontrado |
5 | Acceso denegado |
16 | Intenta borrar el directorio actual |
26 | Disco sin sistema de ficheros |
87 | Parámetro no valido |
108 | Unidad bloqueada |
206 | Nombre de fichero demasiado largo |
DosFindClose
[editar]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 | |
---|---|
hdirDirHandle | Un handle asignado por una llamada a DosFindFirst, o usado en una llamada a DosFindNext. |
Códigos de error | |
---|---|
0 | Sin error |
6 | HANDLE no valido |
DosFindFirst
[editar]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 | |||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
pszFileName | Puntero a una cadena ASCIIZ que define el criterio de busqueda | ||||||||||||||||||||||||||||||
phdirDirHandle | Puntero 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. | ||||||||||||||||||||||||||||||
ulAttribute | Campo de bits que determina los tipos de archivos que se deben buscar. | ||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
pResultBuf | Puntero al buffer en donde se almacenarán los resultados de la búsqueda. | ||||||||||||||||||||||||||||||
ulResultBufLen | Contiene la longitud, en bytes, de ResultBuf | ||||||||||||||||||||||||||||||
pSearchCount | Puntero 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. | ||||||||||||||||||||||||||||||
ulFileInfoLevel | Especifica el nivel de información que se desea: 1 es el nivel estandar. Con 2 y 3 se accede a los EAs. |
Códigos de error | |
---|---|
0 | Sin error |
2 | Fichero no encontrado |
3 | Path no encontrado |
6 | HANDLE no valido |
18 | No hay más ficheros |
26 | Disco sin sistema de ficheros |
87 | Parámetro no valido |
108 | Unidad bloqueada |
111 | Desbordamiento del buffer |
113 | No hay más handles de busqueda |
206 | Nombre de fichero demasiado largo |
208 | Meta-expansion demasiado larga |
254 | Nombre de EA no válido |
275 | EAs no coinciden |
DosFindNext
[editar]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 | |
---|---|
hdirDirHandle | Handle de busqueda, proporcionado por DosFindFirst. |
pResultBuf | Puntero al buffer donde almacenará las coincidencias encontradas. |
ulResultBufLen | La longitud en bytes de ResultBuf. |
pSearchCount | Antes 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. |
Códigos de error | |
---|---|
0 | Sin error |
6 | HANDLE no valido |
18 | No hay más ficheros |
26 | Disco sin sistema de ficheros |
87 | Parámetro no valido |
111 | Desbordamiento del buffer |
275 | EAs no coinciden |
DosForceDelete
[editar]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 | |
---|---|
pszFileName | 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. |
Códigos de error | |
---|---|
0 | Sin error |
2 | Fichero no encontrado |
3 | Path no encontrado |
5 | Acceso denegado |
26 | Disco sin sistema de ficheros |
32 | Violación de compartición |
36 | Desbordamiento del buffer de compartición |
87 | Parámetro no valido |
206 | Nombre de fichero demasiado largo |
DosMove
[editar]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 | |
---|---|
pszOldPathName | Puntero 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. |
pszNewPathName | Puntero 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. |
Códigos de error | |
---|---|
0 | Sin error |
2 | Fichero no encontrado |
3 | Path no encontrado |
5 | Acceso denegado |
17 | Los dispositivos fuente y destino son distintos |
26 | Disco sin sistema de ficheros |
32 | Violación de compartición |
36 | Desbordamiento del buffer de compartición |
87 | Parámetro no valido |
108 | Unidad bloqueada |
206 | Nombre de fichero demasiado largo |
250 | Fichero origen y destino son el mismo |
251 | El directorio destino está dentro del fuente |
DosOpen
[editar]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 | |||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
pszFileName | Puntero 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. | ||||||||||||||||||||||||
pshfFileHandle | Puntero a una variable donde OS/2 almacenará el handle asignado al fichero. | ||||||||||||||||||||||||
pActionTaken | Puntero 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. | ||||||||||||||||||||||||
| |||||||||||||||||||||||||
ulFileSize | Nuevo 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 | ||||||||||||||||||||||||
ulFileAttribute | Doble palabra conteniendo el siguiente mapa de bits. Solo es válido si el fichero es creado. | ||||||||||||||||||||||||
| |||||||||||||||||||||||||
ulOpenFlag | Campo de bits de doble palabra que indica la acción a tomar en caso de que exista o no el fichero. | ||||||||||||||||||||||||
| |||||||||||||||||||||||||
ulOpenMode | Campo de bits de doble palabra que describe el modo de operación de la función. | ||||||||||||||||||||||||
| |||||||||||||||||||||||||
pEABuf | Puntero 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. |
Códigos de error | |
---|---|
0 | Sin error |
2 | Fichero no encontrado |
3 | Path no encontrado |
4 | Demasiados archivos abiertos |
5 | Acceso denegado |
12 | Modo de acceso no valido |
26 | Disco sin sistema de ficheros |
32 | Violación de compartición |
36 | Desbordamiento del buffer de compartición |
82 | No se puede crear fichero |
87 | Parámetro no valido |
99 | Dispositivo en uso |
108 | Unidad bloqueada |
110 | Fallo en la apertura |
112 | Disco lleno |
206 | Nombre de fichero demasiado largo |
231 | Cauce (pipe) ocupado. |
DosQueryCurrentDir
[editar]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 | |
---|---|
ulDriveNumber | Numero de unidad. El valor 0 indica la unidad actual, 1 es la unidad A, 2 es la unidad B, 3 la unidad C, etc. |
pbDirPath | Puntero al buffer en donde OS/2 devolverá el path completo. |
pDirPathLen | Puntero 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. |
Códigos de error | |
---|---|
0 | Sin error |
15 | Unidad no válida |
26 | Disco sin sistema de ficheros |
108 | Unidad bloqueada |
111 | Desbordamiento del buffer |
DosQueryCurrentDisk
[editar]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 | |||||||
---|---|---|---|---|---|---|---|
pDriveNumber | Puntero 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. | ||||||
pLogicalDriveMap | Puntero 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: | ||||||
|
Códigos de error | |
---|---|
0 | Sin error |
DosRead
[editar]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 | |
---|---|
FileHandle | Handle obtenido de DosOpen. |
pBufferArea | Puntero a un buffer donde recibir los bytes leidos. |
ulBufferLength | Longitud en bytes del buffer. Es el número de bytes a leer. |
pBytesRead | Puntero a una variable donde OS/2 escribe el número de bytes leidos realmente. |
Códigos de error | |
---|---|
0 | Sin error |
5 | Acceso denegado |
6 | HANDLE no valido |
26 | Disco sin sistema de ficheros |
33 | Violación del bloqueo |
109 | El cauce (pipe) está cerrado |
234 | Demasiados datos |
DosResetBuffer
[editar]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 | |
---|---|
FileHandle | Un handle al fichero cuyo buffer se quiere almacenar. |
Códigos de error | |
---|---|
0 | Sin error |
2 | Fichero no encontrado |
5 | Acceso denegado |
6 | HANDLE no valido |
DosScanEnv
[editar]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 | |
---|---|
pszEnvVarName | Puntero a una cadena con la variable de entorno a buscar. No se debe incluir el signo igual (=) pues no es parte del nombre. |
pszResultPointer | Puntero 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. |
Códigos de error | |
---|---|
0 | Sin error |
203 | Variable de entorno no encontrada |
DosSetCurrentDir
[editar]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 | |
---|---|
pszDirName | Puntero a una cadena con el nuevo Path. |
Códigos de error | |
---|---|
0 | Sin error |
2 | Fichero no encontrado |
3 | Path no encontrado |
5 | Acceso denegado |
8 | No hay suficiente memoria |
26 | Disco sin sistema de ficheros |
87 | Parámetro no valido |
108 | Unidad bloqueada |
206 | Nombre de fichero demasiado largo |
DosSetDefaultDisk
[editar]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 | |
---|---|
ulDriveNumber | Nueva unidad por defecto. El valor 1 representa a la unidad A, 2 es la unidad B, 3 es la unidad C, etc. |
Códigos de error | |
---|---|
0 | Sin error |
15 | Unidad no válida |
DosShutdown
[editar]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 | |
---|---|
ulReserved | Doble palabra. Debe valer cero. |
Códigos de error | |
---|---|
0 | Sin error |
87 | Parámetro no valido |
274 | Ya se está ejecutando un ShutDown |
DosWrite
[editar]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 | |
---|---|
FileHandle | Contiene un handle obtenido con DosOpen |
pBufferArea | Puntero al buffer que contiene los datos a escribir |
ulBufferLength | Numero de bytes a escribir |
pBytesWritten | Puntero a una variable donde OS/2 devolverá el número de bytes escritos realmente |
Códigos de error | |
---|---|
0 | Sin error |
5 | Acceso denegado |
6 | HANDLE no valido |
19 | El sistema es de solo lectura o está protegido contra escritura |
26 | Disco sin sistema de ficheros |
29 | Ha fallado la escritura |
33 | Violación del bloqueo |
109 | El cauce (pipe) está cerrado |