El siguiente programa C de ejemplo, ZFLDATA, consulta de forma dinámica el
DSName para un DDName que se pase. El programa de ejemplo en PL/I en
Referencias relacionadas también ilustra la llamada a este programa
C para consultar el DSName para el DDName de SYSXMLSD,
referente a la información de retorno de error.
Como parte del proceso,
TMPLT00 llama a una rutina C denominada ZFLDATA. Esta rutina tiene una sola finalidad. Toma un nombre DD de un conjunto de datos y, si es posible, devolverá el nombre del conjunto de datos al que hace referencia el nombre DD. El código fuente de ZFLDATA se lista a continuación.
#include <stdio.h>
#include <string.h>
#define FILENAMEMAX 255
#define ATTRMAX 100
int main(void)
{
FILE *stream;
char dsn[FILENAMEMAX];
char filename[FILENAMEMAX];
char fileattrs[ATTRMAX];
int rc;
int getFileData(char * dsn, char * filename, char * fileattrs);
memset(filename ,'\0',sizeof(filename));
memset(filename ,'\0',sizeof(fileattrs));
memcpy(filename ,"DD:SYSXMLSD",sizeof("DD:SYSXMLSD"));
memcpy(fileattrs ,"a+",
sizeof("a+"));
rc = ZFLDATA(dsn,filename,fileattrs);
if (rc != 0)
printf("fldata failed\n");
else
printf("filename is %s\n",dsn);
}
int ZFLDATA(char * dsn, char *fn, char *fileattrs)
{
fldata_t fileinfo;
fldata_t * fileinfoptr;
int rc;
FILE *stream;
/******************************************************/
/*Obtener secuencia para archivo y atributos pasados */
/******************************************************/
stream = fopen(fn,fileattrs);
if (stream == NULL)
{
perror("***FAILURE OPENING FILE*****");
}
/******************************************************/
/*Obtener nombre conjunto datos en DASD de fldata */
/******************************************************/
memset(dsn ,'\0',
sizeof(dsn));
fileinfoptr = &fileinfo;
rc = fldata(stream, dsn, &fileinfo;);
if (rc != 0)
{
printf("fldata failed\n");
}
else
{
memcpy (dsn,
fileinfoptr->__dsname,
strlen(fileinfoptr->__dsname));
}
fclose(stream);
return rc;
}