From: Eric Wong Date: 2014-08-29T08:50:36+00:00 Subject: [ruby-core:64645] Re: [ruby-trunk - Feature #10181] [Open] New method File.openat() Joel VanderWerf wrote: > On 08/29/2014 01:21 AM, Eric Wong wrote: > >Joel VanderWerf wrote: > >>On 08/29/2014 12:55 AM, Eric Wong wrote: > >>>Joel VanderWerf wrote: > >>>>On 08/28/2014 02:53 PM, Eric Wong wrote: > >>>>>I like this feature. > >>>>> > >>>>>If matz approves, I assume you also want to add other *at functions? > >>>>>e.g. fstatat, renameat, unlinkat, mkdirat, etc. > >>>> > >>>>Hm, that suggests... > >>>> > >>>>Dir.at(...).open(...) > >>>>Dir.at(...).fstat(...) > >>> > >>>How would that be implemented? > >> > >>Couldn't Dir.at(...) return an object that wraps the fd of the dir? > > > >Yes, but it would need to cache the _same_ object every time it's called > >given that arg for a given thread. Then it might not detect when that > >thread might actually want a different FD/object, and the cache can fill > >up or expire and we still end up with unpredictable behavior. > > What if you always used it like this: > > d = Dir.at() > d.open() > d.fstat() > > so it's up to the caller to decide explicitly when to use the same > object or not. It reflects the underlying fd-based API, doesn't it? OK, that would work. However it ends up creating a new object type and overloading of names, making it harder to review code, I think. I prefer this: d = Dir.open(..) d.openat(...) d.fstatat(..)