From: ahlan@marriott.org
Subject: Re: Exclusive file access
Date: Thu, 27 Aug 2015 22:41:45 -0700 (PDT)
Date: 2015-08-27T22:41:45-07:00 [thread overview]
Message-ID: <6a59d964-2c77-484e-a002-6e17aafb6cd2@googlegroups.com> (raw)
In-Reply-To: <eec18573-876b-4151-b13a-15a103bba30e@googlegroups.com>
Under Windows files may be opened exclusively or shared.
In fact you can have a mixture such as single writer multiple readers.
Multiple writers is possible but rarely used, so it is an odd choice for Gnat to have chosen.
Using form="Shared=no" on the open using Gnat for Windows does not open the file exclusively with regard to other processes.
Which is what I would have expected and I would have thought 99% of users would require.
As far as I can see there is no way that a pure Gnat Ada program can open a file for output exclusively.
If this is true then this is a severe weakness of Gnat.
ObjectAda did what was expected by default.
On Thursday, August 27, 2015 at 3:52:36 PM UTC+2, ah...@marriott.org wrote:
> Dear All,
>
> Obviously I'm misunderstanding something here.
>
> I thought that if two processes tried to open the same file for write access then the second process would get an exception.
>
> I have a simple example which when compiled using GnatPro 7.3.1 and run under 32-bit Windows XP demonstrates that this is not so.
>
> Which then begs the question on how to detect if the file is in use and abort if it is.
> This should be simple but obviously too complex for my tiny brain.
> Does anyone know how to do this from Ada (without resorting to the OS directly)?
>
> My simple test program is
>
> package body Test is
>
> package Io renames Ada.Text_IO;
>
> procedure Work is
> The_File : Io.File_Type;
> begin
> Io.Open (The_File, Io.Out_File, "Test.Txt");
> for Count in Natural'value(Ada.Command_Line.Argument(1)) .. Natural'value(Ada.Command_Line.Argument(2)) loop
> Io.Put_Line (The_File, "Count =" & Count'img);
> Io.Put_Line ("Count =" & Count'img);
> delay 1.0;
> end loop;
> Io.Close (The_File);
> exception
> when others =>
> Io.Put_Line ("Exception");
> end Work;
>
> end Test;
>
> If I execute this from one process with parameters 1 10 and then when it reaches 8 start the program again from a second process with parameters 3 7 on the same machine, the resultant file is a nice mixture! :-(
>
> Count = 3
> Count = 4
> Count = 5
> Count = 6
> Count = 7
> Count = 6
> Count = 7
> Count = 8
> Count = 9
> Count = 10
>
> This is not what I want. I want what the first instance produces and the second instance to fail. Surely nobody would want otherwise ;-)
>
> Best wishes,
> Ahlan
next prev parent reply other threads:[~2015-08-28 5:41 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-27 13:52 Exclusive file access ahlan
2015-08-27 14:27 ` gautier_niouzes
2015-08-31 23:20 ` Randy Brukardt
2015-09-01 16:23 ` Pascal Obry
2015-09-01 20:48 ` Randy Brukardt
2015-08-27 14:42 ` Björn Lundin
2015-08-27 14:48 ` G.B.
2015-08-27 15:08 ` Björn Lundin
2015-08-27 18:38 ` tmoran
2015-08-27 23:16 ` Georg Bauhaus
2015-08-27 23:29 ` Pascal Obry
2015-08-28 7:25 ` Georg Bauhaus
2015-08-27 15:15 ` ahlan
2015-08-27 18:29 ` Jeffrey R. Carter
2015-08-28 5:41 ` ahlan [this message]
2015-08-28 7:10 ` Georg Bauhaus
2015-08-28 17:40 ` ahlan
2015-08-28 19:49 ` Anh Vo
2015-08-28 21:06 ` Simon Wright
2015-08-28 21:38 ` Jeffrey R. Carter
2015-08-29 7:05 ` Dmitry A. Kazakov
2015-08-29 8:31 ` Pascal Obry
2015-08-29 12:02 ` Dmitry A. Kazakov
2015-08-30 11:35 ` Florian Weimer
2015-08-30 12:44 ` Dmitry A. Kazakov
2015-08-30 19:37 ` Florian Weimer
2015-08-31 7:22 ` Dmitry A. Kazakov
2015-08-31 21:12 ` Florian Weimer
2015-09-01 7:26 ` Dmitry A. Kazakov
2015-09-07 18:27 ` Florian Weimer
2015-09-07 19:06 ` Dmitry A. Kazakov
2015-09-11 16:54 ` Florian Weimer
2015-08-31 23:34 ` Randy Brukardt
2015-09-01 7:33 ` Dmitry A. Kazakov
2015-08-29 16:07 ` gautier_niouzes
2015-08-29 17:12 ` Dmitry A. Kazakov
2015-09-01 12:37 ` brbarkstrom
2015-09-01 14:05 ` ahlan
2015-09-01 15:13 ` Simon Wright
2015-09-01 20:36 ` Randy Brukardt
2015-09-01 15:17 ` Jacob Sparre Andersen
2015-09-01 20:37 ` Randy Brukardt
2015-09-01 16:05 ` G.B.
2015-09-01 20:02 ` brbarkstrom
2015-09-01 21:17 ` Simon Wright
2015-09-05 15:52 ` Björn Lundin
2015-09-01 20:31 ` Randy Brukardt
2015-09-01 15:31 ` ahlan
2015-09-05 15:56 ` Björn Lundin
2015-09-06 17:38 ` brbarkstrom
2015-09-06 19:52 ` Björn Lundin
2015-09-07 15:18 ` brbarkstrom
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox