Re: Equivalent of openat() on osx?
Re: Equivalent of openat() on osx?
- Subject: Re: Equivalent of openat() on osx?
- From: Eric Gouriou <email@hidden>
- Date: Wed, 04 May 2011 22:58:48 -0700
On May 3, 2011, at 9:13 AM, Anatol Pomozov wrote:
> Hi,
>
> I am porting a Linux program to macosx (target is 10.6 version) and
> the program uses openat/unlinkat/... functions. Although these
> functions are not in POSIX, they are widely used on *nixes and the
> part proposal the next POSIX.
>
> My question what is the best equivalent for the opentat() functions
> that can be used in multithreaded application. Currently I use
> something like this:
>
>
> int openat(int dirfd, const char *pathname, int flags, ...)
> {
> int fd;
>
> if(fchdir(dirfd) < 0) {
> perror("fchdir");
> return -1;
> }
> fd = open(pathname, flags, mode);
> // chdir to the original CWD
> return fd;
> }
>
> But this is not a perfect solution - current working directory is
> shared among all threads, it means that openat() may affect other
> threads. Is there an equivalent of this implementation without
> changing the current directory?
Use a per-thread CWD? Darwin supports them but I can't figure where/whether it
is documented. A previous reference to this capability, from an apple.com address:
<http://lists.apple.com/archives/unix-porting/2008/Mar/msg00028.html>
However, in my opinion, the openat()/... functions are good deal more convenient
than per-thread CWDs. I'm glad to hear that they are considered for inclusion
in an upcoming revision of POSIX.
Eric
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden