-
write & open
Bonjour, (question fortran 77)
Est-ce qu'un write(6, *** ) nécessite auparavant un open(unit=6,***) auparavant ? (et du coup un close après)
je me suis aperçu fortuitement que la présence ou non du open/close affectait dans certains cas mes résultats, alors que le write a un purement informatif ?
Est-ce que vous voyez une raison rationnelle à ça ? :aie:
Merci beaucoup !
-
il y a en fortran quelques unité logiques déjà affectée:
0: stderr
5: stdin
6: stdout
donc si tu fait un write(6,.... c'est que tu cherche à écrire dans ta fenetre de terminal!!!!
il me semble d'ailleur que si tu fait un open(unit=6,... il doit revoyer une erreur genre 'fichier déjà ouvert'
-
Le comportement n'est pas uniforme d'un compilateur à l'autre, mais ça ressemble généralement à ceci :
- Les units stderr, stdin et stdout sont préconnectés.
- Stdin et stdout sur * et stderr généralement sur le unit 0.
- stdin est également associé au unit 5 et stdout est également associé au unit 6.
- Tu peux reconnecter 5 et 6 sur un autre fichier avec un open.
- Cette reconnexion n'affecte pas nécessairement la préconnexion à *
Note : Il est déconseillé d'utiliser des units plus petits que 10 pour éviter les conflits avec les units préconnectés pouvant être différents d'un compilateur à l'autre...
-
Salut!
Historiquement, ça vient de l'IBM 7040 (peut-être même d'avant), où les unités périphériques étaient "prénumérotées":
0 Bande magnétique
1 Bande magnétique
2 Disque dur
3 Disque dur
4 Disque dur
5 Lecteur de cartes
6 Imprimante
7 Perforateur de cartes
Jean-Marc Blanc
-
Les units découlent effectivement de réalité historique. Initialement, ils désignaient les ports physiques de l'ordinateur. Le lecteur de bande était branché dans le port 1, la console de l'opérateur dans le port 5 et l'imprimante dans le port 6...