[comp.lang.fortran] I would like to have an argumen

hutchson@convex.UUCP (03/10/88)

GCOS has a similar bifurcation between (global) file names and (local) file
descriptors.  The "file descriptors" are set up by the environment--the usual
jcl or shell commands.
     We (I was supporting GCOS Fortran-77 at the time) had endless complaints
from users about what was possible/difficult/confusing about file access via
the OPEN statement, until we adopted a scheme essentially identical to the one
suggested:
   1)  open status='scratch' generated (or accessed) a temporary file in the
     local name space:  it usually vanished at job close but could be left
     around via close status='keep' (This last, of course, is an extention
     to the ANSI standard.
   2)  open name='ambiguous name' looked first in the local name space then
     in the global name space for the file; if not found, it created it in
     the global name space.
   3)  open name='global name'  (The local name space was a subset of the
     global name space) looked in the global name space; if not found, it
     created it.
This made everyone happy:  it is general enough that plain-vanilla use of
     open works as on other systems, powerful enough to do anything you could
     think of doing with an OPEN statement, easy to explain.

I work on unix now, and I miss temporary files.  Yes, I know about mktemp:
it doesn't work at all well, and I wrote a better one for my own uses.  But
there is no such thing on unix as a temporary file that steals SWIFTLY and
silently away as soon as the job finishes executing.  This is not a feature;
this is a severe limitation!  It is not possible to simulate temporary files
on unix without great effort; it is a pain even to pretend to simulate it.

"And there was evening and morning, another day.  And abortive processes
generated four more files in /tmp, and the system manager saw that it was not
good, for verily the partition overflowed and the system rested on the seventh
day."

levy@ttrdc.UUCP (Daniel R. Levy) (03/12/88)

In article <68000011@convex>, hutchson@convex.UUCP writes:
> I work on unix now, and I miss temporary files.  Yes, I know about mktemp:
> it doesn't work at all well, and I wrote a better one for my own uses.  But
> there is no such thing on unix as a temporary file that steals SWIFTLY and
> silently away as soon as the job finishes executing.  This is not a feature;
> this is a severe limitation!  It is not possible to simulate temporary files
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> on unix without great effort; it is a pain even to pretend to simulate it.
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^


I'd challenge that.  Files which are open when they are unlinked stick around
until the process that opened them terminates.

What's so hard about:

	char *tmpfnam = mktemp("/tmp/XXXXXX");
	int fd = creat(tmpfnam,MODE);
	unlink (tmpfnam);	/* You can still scribble in the temp file,
				 * and read it, via the file descriptor.
				 * It goes away when the process terminates.
				 */
or in f77

	character*16 tmpnam
	open (unit=1,status='scratch')
	inquire (unit=1, name=tmpnam)
	open (unit=2,file=tmpnam,status='old')
	close (unit=2, status='delete')
C or for the two lines immediately above, substitute
C
C	call system('rm -f '//tmpnam)
C
C	now you can access your scratch file through logical unit 1
C	and even if the program dies abnormally, the scratch file goes
C	away
-- 
|------------Dan Levy------------|  Path: ..!{akgua,homxb,ihnp4,ltuxa,mvuxa,
|         an Engihacker @        |  	<most AT&T machines>}!ttrdc!ttrda!levy
| AT&T Computer Systems Division |  Disclaimer?  Huh?  What disclaimer???
|--------Skokie, Illinois--------|

aglew@ccvaxa.UUCP (03/13/88)

..> UNIX not having temporary files
..> versus the open/unlink trick that keeps your file open until
..> your process dies.

I'm of two minds about scratch files. On the one hand, I like not
having to explicitly, or externally, clean up; on the other hand,
I sometimes used to wish that I could look at a scratch file after
a program aborted ("Hey Mr. POD, my program aborted after 2 hours!"
"Well, how far did it get?" "Oh, all the temporary results are stored
in a scratch file...")

A good checkpoint facility obviates this need.

jlg@a.UUCP (Jim Giles) (03/15/88)

> UNIX not having temporary files
> versus the open/unlink trick that keeps your file open until
> your process dies.

This won't work on most UNIX systems if you want to be able to 
conduct an adequate post-mortem on a job that dies prematurely.
The contents of a scratch file may be vital in determining the
problem.  Since UNIX doesn't contain a restart capability for
aborted jobs, this problem is not as great as it might be (but
the lack of a post-mortem restart facility severly impairs 
the UNIX environment).  Since the standard doesn't specify what
should happen when a job terminates abnormally, I recommend
that the I/O library should not destroy scratch files until
a NORMAL termination.  This leaves a method to debug code 
corpses.

J. Giles
Los Alamos