Rational Developer for System z, Version 7.6

Programme C de retour d'erreur

L'exemple de programme C suivant, ZFLDATA, procède à l'analyse dynamique du nom de fichier d'un nom symbolique transmis. L'exemple de programme PL/I dans les références associées illustre l'appel à ce programme C pour analyser le nom de fichier du nom symbolique SYSXMLSD pour le suivi des erreurs.
Dans le cadre du traitement, TMPLT00 appelle une routine C appelée ZFLDATA. Cette routine a pour seul objet de prendre un nom de définition de données de fichier et, le cas échéant, de renvoyer le nom de fichier auquel fait référence le nom de définition de données. La source de ZFLDATA est présentée ci-dessous.
#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 dataset 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;
	}

Conditions d'utilisation | Commentaires en retour

Ce centre de documentation utilise la technologie Eclipse. (http://www.eclipse.org)