Practical Fortran
File I/O
Scratch Unit
A scratch file is a unit with no name that is opened and discarded automatically. Useful for short-lived buffers.
Program
Play the program to write a number to a scratch unit, rewind, read it back, and double it.
file_io.f90
Replay: real traced execution (multi-file project)
program file_io_demo
implicit none
integer :: unit_, value_in, value_out
value_in = 42
open(newunit=unit_, status='scratch', action='readwrite')
write(unit_, '(I0)') value_in
rewind(unit_)
read(unit_, *) value_out
close(unit_)
print '(I0)', value_out * 2
end program file_io_demo
value_in ← 42
3integer :: unit_, value_in, value_out4value_in = 425open(newunit=unit_, status='scratch', action='readwrite')values this step42value_inscratch unit ← opened
4value_in = 425open(newunit=unit_, status='scratch', action='readwrite')6write(unit_, '(I0)') value_invalues this stepopenedscratch unitfile ← 42
5open(newunit=unit_, status='scratch', action='readwrite')6write(unit_, '(I0)') value_in7rewind(unit_)values this step42file42value_inposition ← start
6write(unit_, '(I0)') value_in7rewind(unit_)8read(unit_, *) value_outvalues this stepstartpositionvalue_out ← 42
7rewind(unit_)8read(unit_, *) value_out9close(unit_)values this step42value_out42filescratch unit ← closed
8read(unit_, *) value_out9close(unit_)10print '(I0)', value_out * 2values this stepclosedscratch unitprint '(I0)', value_out * 2
9 close(unit_)10 print '(I0)', value_out * 211end program file_io_demooutput84values this step42value_out
Follow the Scratch File
value_instarts as42.- The scratch unit opens for reading and writing.
- The program writes
42into the scratch file. rewindmoves back to the start before reading.value_outis42, sovalue_out * 2prints84. | step | value | | --- | --- | | write to scratch file | 42 | | afterrewindand read | 42 | | doubled output | 84 |
scratch
`status='scratch'` opens a temporary unit deleted on close.
newunit
`newunit=unit_` picks an unused unit number.
rewind
`rewind` returns the file position to the start before reading.
Exercise: file_io.f90
Reproduce 84, then trace how value_in 42 is written, read back as value_out 42, and doubled.