comp.lang.ada
 help / color / mirror / Atom feed
From: "Warren W. Gay VE3WWG" <ve3wwg@cogeco.ca>
Subject: Re: I/O - exception handling
Date: Tue, 27 May 2003 12:17:42 -0400
Date: 2003-05-27T12:17:42-04:00	[thread overview]
Message-ID: <3ED38FA6.5050002@cogeco.ca> (raw)
In-Reply-To: HcAAa.13109$xV3.2235@nwrdny03.gnilink.net

Hyman Rosen wrote:
> The main problem is that when you get an error on closing a
> file, there's no recovery possible short of trying to recreate
> its contents somehow and somewhere. It's more like a hardware
> error than anything else.

But it is _still_ necessary to pay attention to this case. Using
fclose() in C (which GNAT calls upon), is a good example. If the
underlying fclose() fails this could represent a variety of serious
program flaws and/or media defects:

  - If there has been no prior Flush (or fflush in C), then this
    could be a "write error" for buffered data - this could have
    serious consequences.

  - If you have closed the underlying file descriptor that the
    File_Type (or FILE in C) is using, then unwritten data is
    also not getting out (In Ada this can be done by using
    POSIX.IO.Close(File_Descriptor) somewhere else in the code).

Basically, if close fails, this indicates that you most likely
have a serious code flaw, or at minimum, that you have a hardware
media problem (or possibly some other corruption problem).

IMO, the worst thing you can do is ignore the problem, unless
for example you are _expecting_ failures.

Maybe this is stating the obvious, but an example of this
might be where you might do this in C, where you want to be
sure that any files that were opened by the parent process, are
now closed:

   if ( !(PID = fork()) ) {
        /* In child process */
        for ( fd = 0; x < NOFILE; ++x )
              close(fd);   /* Ignore errors: close all files */

I think raising exceptions in close makes sense, because I have
not found too many programs that actually check that close succeeds.
Those same programs do not call fflush prior to the close either
(if they do, they don't check the result).  If this were an editor
for example, I would be extremely annoyed that the last 4K of my
code got truncated because the close()->fflush() call failed because
the file system returned ENOSPC!  I would expect that the editor
would then either keep my original source file somewhere else or
that I get another chance to save it, somewhere else.

-- 
Warren W. Gay VE3WWG
http://home.cogeco.ca/~ve3wwg




  reply	other threads:[~2003-05-27 16:17 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-05-26 13:05 I/O - exception handling Sergey Koshcheyev
2003-05-26 13:33 ` Preben Randhol
2003-05-26 14:11   ` Sergey Koshcheyev
2003-05-26 14:29     ` Preben Randhol
2003-05-26 14:31       ` Preben Randhol
2003-05-26 14:39       ` Sergey Koshcheyev
2003-05-26 16:57         ` Preben Randhol
2003-05-26 17:48           ` Sergey Koshcheyev
2003-05-26 18:08             ` Preben Randhol
2003-05-26 18:48               ` Sergey Koshcheyev
2003-05-27  1:24                 ` Hyman Rosen
2003-05-27  2:20                   ` Larry Kilgallen
2003-05-27  2:38                     ` Hyman Rosen
2003-05-27 16:17                       ` Warren W. Gay VE3WWG [this message]
2003-05-27 19:40                         ` Hyman Rosen
2003-05-27 20:18                           ` Warren W. Gay VE3WWG
2003-05-27 10:31                     ` Larry Kilgallen
2003-05-27 21:43                       ` Hyman Rosen
2003-05-27  5:33           ` Robert I. Eachus
2003-05-27 13:53             ` Preben Randhol
2003-05-27 12:01           ` Lutz Donnerhacke
2003-05-26 14:12   ` Simon Wright
2003-05-26 14:24     ` Preben Randhol
2003-05-26 14:52 ` Jean-Pierre Rosen
2003-05-26 15:26   ` Sergey Koshcheyev
2003-05-26 15:45 ` Hyman Rosen
2003-05-26 16:25   ` Sergey Koshcheyev
2003-05-27  1:35     ` Hyman Rosen
2003-05-28 21:47       ` Robert A Duff
2003-05-26 16:31 ` Steve
2003-05-27  2:36 ` Anisimkov
2003-05-27  7:21   ` Sergey Koshcheyev
2003-05-27 13:47     ` Preben Randhol
2003-05-27 19:01       ` Sergey Koshcheyev
2003-05-27 16:50     ` Dmitriy Anisimkov
2003-05-27 18:11       ` Ludovic Brenta
2003-05-28  1:27   ` Jeffrey Carter
2003-05-28  7:33     ` Sergey Koshcheyev
2003-05-28  9:08       ` Preben Randhol
2003-05-28 18:07         ` Randy Brukardt
2003-05-28 22:51           ` Robert I. Eachus
2003-05-29  2:03             ` Jeffrey Carter
2003-05-29  8:39               ` Manuel Collado
2003-05-30  6:56           ` Preben Randhol
2003-05-30  9:33             ` Larry Kilgallen
2003-05-30 11:13               ` Preben Randhol
2003-05-30 11:39                 ` Larry Kilgallen
2003-05-30 11:41                   ` Preben Randhol
2003-05-30 19:51                 ` Randy Brukardt
2003-06-01 16:08                   ` Robert I. Eachus
2003-06-03  0:18                     ` Randy Brukardt
2003-06-03  4:16                       ` Robert I. Eachus
     [not found] ` <slrnbd6m69.vh.lutz@taranis.iks-jena.de>
2003-05-27 14:06   ` Preben Randhol
2003-05-27 15:59     ` Lutz Donnerhacke
2003-05-27 19:05   ` Sergey Koshcheyev
2003-05-27 19:32     ` Larry Kilgallen
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox