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);
}