OPENDA(1) OPENDA(1) Entrees/sorties sur fichiers ASYNCHRONES PAR BLOCS (secteurs): OPENDA, READDA, WRITDA, CHECDA, CLOSDA c_openda, c_readda, c_writda, c_checda, c_closda Les sous-programmes READDA/WRITDA lisent/ecrivent de maniere parallele par multiples de 512 mots. Quand le systeme d'exploitation ne le permet pas ils lisent/ecrivent avec attente immediate. ATTENTION: Ne pas melanger les types d'acces sur un meme fichier. Exemple: READDA(10,... WAWRIT(10,... Les mots sont de 64 bits sur le CRAY, de 32 bits sur les 910/920/SUN, et de 60 bits sur les CYBER. OPENDA Ouvre un fichier accessible par blocs. NOTE: Avant OPENDA, il faut un appel a FNOM pour associer un numero d'unite fortran (IUN) au fichier externe qu'on veut ouvrir. Exemples d'appel CALL OPENDA(IUN) c_openda(iun); IUN Numero d'unite fortran associe au fichier. READDA Lit par blocs. ATTENTION: Il peut etre desastreux de faire 2 READDA et/ou WRITDA consecutifs sur un meme fichier sans avoir entre temps fait un appel a CHECDA. Exemples d'appel CALL READDA(IUN,BUF,NS,IS) CALL CHECDA(IUN) c_readda(iun,&BUF,ns,is); c_checda(iun); IUN Numero d'unite fortran associe au fichier. BUF Tableau a lire/ecrire. NS Nombre de secteurs disques. (blocs de 512 mots) a lire/ecrire. IS Numero du premier secteur a lire/ecrire. Le premier secteur d'un fichier est le secteur nume'ro 1. WRITDA Ecrit par blocs. ATTENTION: Il peut etre desastreux de: 1) Faire 2 READDA et/ou WRITDA consecutifs sur un meme fichier sans avoir entre temps fait un appel a CHECDA. 2) Sauter un secteur lorsqu'on ecrit. Si le fichier se termine au doit ecrire a partir du secteur 156 ou avant. Exemples d'appel CALL WRITDA(IUN,BUF,NS,IS) CALL CHECDA(IUN) c_writda(iun,&BUF,ns,is); c_checda(iun); IUN Numero d'unite fortran associe au fichier. BUF Tableau a lire/ecrire. NS Nombre de secteurs disques. (blocs de 512 mots) a lire/ecrire. IS Numero du premier secteur a lire/ecrire. Le premier secteur d'un fichier est le secteur nume'ro 1. CHECDA Met le programme en attente jusqu'a la fin de l'operation READDA ou WRITDA en cours. Exemples d'appel CALL CHECDA(IUN) c_checda(iun); IUN Numero d'unite fortran associe au fichier. CLOSDA Ferme un fichier a acces par blocs. Exemples d'appel CALL CLOSDA(IUN) c_closda(iun); IUN Numero d'unite fortran associe au fichier. Exemple d'appel FORTRAN: PROGRAM XXX * - - - - - - - - - INTEGER BUF(512,8), FNOM, IERR, IUN, NS IS = 1 NS = 8 IUN = 10 IERR = FNOM(IUN,'MONTRUC','RND',0) CALL OPENDA(IUN) CALL READDA(IUN,BUF,NS,IS) * * OPERATIONS NE FAISANT PAS APPEL A BUF. * CALL CHECDA(IUN) * * OPERATIONS POUVANT FAIRE APPEL A BUF. * CALL WRITDA(IUN,BUF,NS,IS) * * CALL CHECDA(IUN) * * OPERATIONS POUVANT FAIRE APPEL A BUF. * CALL CLOSDA(IUN) STOP END Exemple d'appel c: main() { int BUF[8][512], c_fnom(), ierr, iun, ns, is; iun = 10; ns = 8; is = 1 ierr = c_fnom(iun,'montruc','RND',0); c_openda(iun); c_readda(iun,&BUF,ns,is); /* operations ne faisant pas appel a` BUF */ c_checda(iun); /* operations pouvant utiliser BUF */ c_writda(iun,&BUF,ns,is); /* operations ne faisant pas appel a` BUF */ c_checda(iun); /* operations pouvant utiliser BUF */ c_closda(iun); }