다음 샘플 C 프로그램 ZFLDATA는 전달된 DDName의 DSName을
동적으로 조회합니다. 관련 참조에 있는 PL/I 샘플 프로그램은
오류 피드백을 위해 SYSXMLSD DDName의 DSName 조회를 수행하는
C 프로그램의 호출을 설명합니다.
TMPLT00에서 처리의 일부로
ZFLDATA라는 C 루틴을 호출합니다. 이 루틴의 용도는 하나입니다. 데이터 세트
DD 이름을 사용하여 가능한 경우 DD 이름이 가리키는
데이터 세트 이름을 리턴합니다. ZFLDATA의 소스가 아래에
나열되어 있습니다.
#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;
/******************************************************/
/*Get a stream for the file and attributes passed in */
/******************************************************/
stream = fopen(fn,fileattrs);
if (stream == NULL)
{
perror("***FAILURE OPENING FILE*****");
}
/******************************************************/
/*Get the actual data set name on DASD from 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;
}