[#1649] Re: New Ruby projects — Yukihiro Matsumoto <matz@...>
The following message is a courtesy copy of an article
[#1672] Re: Ruby 1.4 stable manual bug? — Yukihiro Matsumoto <matz@...>
The following message is a courtesy copy of an article
[#1673] Re: Possible problem with ext/socket in 1.5.2 — itojun@...
[#1694] Conventions for our Ruby book — Dave Thomas <Dave@...>
[#1715] Install postgresql support — Ikhlasul Amal <amal@...>
Hi all,
Hi,
[#1786] Is this a bug? — Clemens Hintze <clemens.hintze@...>
(mailed & posted)
[#1814] Objects nested sometimes. — Hugh Sasse Staff Elec Eng <hgs@...>
I am attemptiong to write a package which consists of a workspace
[#1816] Ruby 1.5.3 under Tru64 (Alpha)? — Clemens Hintze <clemens.hintze@...>
Hi all,
Hi,
Yukihiro Matsumoto writes:
Hi,
Hi,
[#1834] enum examples? — Hugh Sasse Staff Elec Eng <hgs@...>
Has anyone any examplse of using the Enumerable module? I've had a
[#1844] Minor irritation, can't figure out how to patch it though! — Hugh Sasse Staff Elec Eng <hgs@...>
I was considering how difficult it would be to patch Ruby to accept
[#1889] [ruby-1.5.3] require / SAFE — ts <decoux@...>
[#1896] Ruby Syntax similar to other languages? — "David Douthitt" <DDouthitt@...>
From: Yukihiro Matsumoto <matz@netlab.co.jp>
[#1900] Enumerations and all that. — Hugh Sasse Staff Elec Eng <hgs@...>
Thank you to the people who responded to my questions about Enumerated
Hugh Sasse Staff Elec Eng <hgs@dmu.ac.uk> writes:
On 16 Mar 2000, Dave Thomas wrote:
[#1929] Re: Class Variables — "David Douthitt" <DDouthitt@...>
| "David Douthitt" <DDouthitt@cuna.com> writes:
[#1942] no Fixnum#new ? — Quinn Dunkan <quinn@...>
Ok, I can add methods to a built-in class well enough (yes I know about succ,
[#1989] English Ruby/Gtk Tutorial? — schneik@...
Hi,
[#2022] rb_global_entry — ts <decoux@...>
[#2036] Anonymous and Singleton Classes — B_DAVISON <Bob.Davison@...>
I am a Ruby newbie and having some problems getting my mind around certain
[#2069] Ruby/GTK+ question about imlib --> gdk-pixbug — schneik@...
[#2073] Re: eval.rb fails — "Dat Nguyen" <thucdat@...>
The doc is fine, this happens only if you try to execute 'until' block
On Wed, 22 Mar 2000, Dat Nguyen wrote:
[#2084] Scope violated by import via 'require'? — Clemens Hintze <c.hintze@...>
Hi,
[#2104] ARGF or $< — Hugh Sasse Staff Elec Eng <hgs@...>
Has anyone any examples of how to use ARGF or $< as I cannot find much
Hi.
[#2165] Ruby strict mode and stand-alone executables. — "Conrad Schneiker" <schneiker@...>
Some people want Ruby to have a strict compile mode.
[#2203] Re: parse bug in 1.5 — schneik@...
[#2212] Re: Ruby/Glade usage questions. — ts <decoux@...>
>>>>> "m" == mrilu <mrilu@ale.cx> writes:
[#2241] setter() for local variables — ts <decoux@...>
[#2256] Multiple assignment of pattern match results. — schneik@...
[#2267] Re: Ruby and Eiffel — h.fulton@...
[#2309] Question about attribute writers — Dave Thomas <Dave@...>
Clemens Hintze <c.hintze@gmx.net> writes:
[ruby-talk:02078] Re: Lockfiles
David Douthitt writes:
...
> | ....And same is true when system is used. Why can you believe a file
> | existence check and a creation in the shell are atomic?
>
> Normally, I would agree. But the (shell) code in question is this:
>
> set -o noclobber
> cat /dev/null 2> /dev/null > process.lock
>
> The real question would be in the code for the redirection operator '>'
> This code would attempt to create an empty file (cat /dev/null), redirect
> it to process.lock ( > process.lock), and throw away error messages
> ( 2> /dev/null). Without the throw-away, one gets a message like this
> if the file exists:
>
> /usr/bin/ksh[2]: process.lock: file already exists
>
> Without the "noclobber" option, the error does not appear, and the
> existing file would be "overwritten" - which in this case of locks,
> would be meaningless.
But you have to look, how it is implemented in the corresponding
shell. I have not looked into the sources but I dare to guess it is
something like:
if (noclobber && stat(filename, &st) >= 0) {
fprintf(stderr, "%s: %s: file already exists\n", argv[0], filename);
} else {
fout = fopen(filename, "w");
if (fout == NULL) {
:
}
:
}
That means the shell will do the existance test for you! But it can be
interrupted between the call to 'stat' and 'fopen'. It suffer from the
same problem as my Ruby solution. Only the gap where that problem
could occure is, of course, much smaller in C than in Ruby.
I have to thank you to put my nose onto that problem again. I have
already tried to minimize the risks in my module. But I could do it
better, I will simply code the relevant function in C. Then the
time-of-danger will be as small as in your shell solution.
I will put an updated version into the contrib dir ASAP.
> | File locking are usually implemented with atomic operations such as
> | symlink or mkdir. These operations are atomic --- an existence check
> | and a creation of a named symbolic link/directory can not be interrupted
> | by any process.
>
> How would one use this? Neither a symbolic link nor a directory would
> have much use as a lock file, I would think.
It depends! The advantage using a directory would be, that nobody
could break the mkdir call. So if I am trying to create a directory my
call to mkdir will succeed or fail. If it was successful it means *I*
have created that directory. If it fails it *could* mean, others have
already created it. The same is true for call to symlink.
I have thought to use this for my module, but decide against it,
because the filelock mechanism used by sendmail do not work with
directories as lock. As I want to make the whole thing as portable as
possible, symlink also was not a choice here.
...
\cle
--
Clemens Hintze mailto: c.hintze@gmx.net