Re: Determining a file's unix file descriptor int value from its pathname?

"Denis Papathanasiou" <[email protected]>
Newsgroups gmane.lisp.cmucl.general
Message-ID <[email protected]>
> The lockfile wants an fd, which, AFAIK, only exists AFTER you open the
> file.

Ah, thanks for that clarification.

You're right: I went back over the details of how file descriptors are
created by the OS, and they're *temporary* non-negative integers based
on what's available, given other file handles currently open, and the
system's OPEN_MAX value -- so there's no way to correlate a pathname
or a pathname namestring to a particular file handler.

> So you have to open the file in Lisp too, via, with-open-file or
> open or whatever.  This will produce a fd-stream object and then you can
> use sys:fd-stream-fd to get the fd associated with that file.

I found it simpler to write a wrapper function in C around the fcntl()
call: the wrapper takes the file name string, tries to create the fd
then and there, and if it's successful, sets/removes the lock.

Logically, it's probably no different to use (with-open-file), get the
fd from (sys:fd-stream-fd) and call fcntl() with that fd as you
suggested, but this interface seems simpler and cleaner to me.

Thanks again for your help with this.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.