Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Opinion: locks, nonblock
- X-seq: zsh-users 8633
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: Felipe Kellermann <stdfk@xxxxxxxxxxxx>, zsh-users@xxxxxxxxxx
- Subject: Re: Opinion: locks, nonblock
- Date: Sat, 26 Mar 2005 18:11:35 +0000
- In-reply-to: <Pine.LNX.4.61.0503242037320.6584@xxxxxxxxxxxxxxx>
- Mailing-list: contact zsh-users-help@xxxxxxxxxx; run by ezmlm
- References: <Pine.LNX.4.61.0503242037320.6584@xxxxxxxxxxxxxxx>
On Mar 24, 9:18pm, Felipe Kellermann wrote:
}
} The [bash] patch adds to options: exlock and nonblock.
} That was just a test. exlock implements a lock to every file opened
} by the shell (using exec) and nonblock makes O_NONBLOCK'ed operations
} (including the possibly exlock'ed I/O).
This strikes me as entirely the wrong way to go about this. It's not
too horrible for the locking part -- except see below -- but there is
a pervasive assumption of blocking I/O in the pipes and redirections
model that is basic to the semantics of shell constructs. Non-blocking
I/O should be something that's activated in a specific and very narrow
context, not turned on and off globally.
} For instance, I have been using lockfile (of procmail) to lock files for
} years. Now I'm wondering if it would not be nicer to have that operation
} natively in my zsh environment.
Have you looked at the source for lockfile? It goes to considerable
lengths to employ a locking strategy that is safe across networked
file systems and a variety of operating system or C library locking
protocols, some of which depend on having the name of a file (not the
file being locked, an additional file) as a semaphore. A simple flock()
as in your patch is not sufficient in a number of cases -- and I won't
even go into the maillock(3X) protocol, which is required on a lot more
systems than document it, though the shell probably wouldn't be locking
email delivery boxes all that often.
} Does anyone implemented something like that already? Or else, does
} anyone have specific tricks to achieve similar functionality? I've
} researched a bit and found nothing.
For non-blocking read, look at the zsh/zselect and zsh/system modules.
If you use zselect to determine which FDs are ready for reading and then
call sysread or syswrite to do the I/O, you can get the effect of a non-
blocking read without having to set the descriptor mode. Non-blocking
write is trickier.
See also the "read" builtin with the -t and -k options.
} Do you guys think it would be nice to have that functionality
} implemented natively in the shell?
It might be useful to add a command to the zsh/system module to perform
fcntl() operations. (Note, however, that's incompatible with flock().)
I can't decide on the best way to enumerate the possible commands, nor
on the right way to return information -- probably something like the
format used by the zsh/stat module would be appropriate.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author