Glenn, I think the only portable way is to do a open(".", O_RDONLY), and if that fails save the name from getcwd(), and restore that, if neither /dev/fd or /proc/${pid}/fd/${dirfd} are working. As far as I know there is no way to open a file using <dev,ino>, and <dev,ino> may not be reliable for all kinds of file systems, such like as fuse (http://en.wikipedia.org/wiki/Filesystem_in_Userspace).
Olga On Thu, Aug 16, 2012 at 1:24 AM, ольга крыжановская <olga.kryzhanov...@gmail.com> wrote: > Glenn, how to an application obtain a fd just using <dev,ino>? > > The alternative, if no /proc or /dev/fd is available, is to save the > cwd, do a temporary cwd using fchdir(), and restore the old cwd. This > is now glibc did it, with a mutex around the whole sequence to make it > thread safe. > > Olga > > On Thu, Aug 16, 2012 at 1:20 AM, Glenn Fowler <g...@research.att.com> wrote: >> >> On Thu, 16 Aug 2012 01:09:29 +0200 =?KOI8-R?B?z8zYx8Egy9LZ1sHOz9fTy8HR?= >> wrote: >>> Glenn, have you ever considered putting an openat(), fstatat(), >>> mkfifoat() emulation into libast, if the base operating system does >>> not have such calls? I have been trying more tests with the at() apis >>> but I am not happy to trash much of libshell with lots of #ifdef >>> AT_CWD tests if there is a better option. >> >>> AFAIK a lot of the at() calls can be emulated by using >>> /dev/fd/${dirfd}/${path} or /proc/${pid}/fd/${dirfd}/${path}. I just >>> do not know, are there cases where /dev/fd or /proc/${pid}/fd are not >>> available (chroot environments?)? >> >> there are a lot of systems with lame or no /proc >> and it will be hard to work around systems with no O_search >> >> but let me think a bit on that >> if we didn't have to worry about dir fd's across exec (probably rare right >> now) >> we might be able to cache emulated open(O_search) paths with <dev,ino> keys >> on systems that don't support /dev/fd/<FD>/<PATH> pr >> /proc/<PID>/fd/<FD>/<PATH> >>> Olga >>> -- >>> , _ _ , >>> { \/`o;====- Olga Kryzhanovska -====;o`\/ } >>> .----'-/`-/ olga.kryzhanov...@gmail.com \-`\-'----. >>> `'-..-| / http://twitter.com/fleyta \ |-..-'` >>> /\/\ Solaris/BSD//C/C++ programmer /\/\ >>> `--` `--` >> > > > > -- > , _ _ , > { \/`o;====- Olga Kryzhanovska -====;o`\/ } > .----'-/`-/ olga.kryzhanov...@gmail.com \-`\-'----. > `'-..-| / http://twitter.com/fleyta \ |-..-'` > /\/\ Solaris/BSD//C/C++ programmer /\/\ > `--` `--` -- , _ _ , { \/`o;====- Olga Kryzhanovska -====;o`\/ } .----'-/`-/ olga.kryzhanov...@gmail.com \-`\-'----. `'-..-| / http://twitter.com/fleyta \ |-..-'` /\/\ Solaris/BSD//C/C++ programmer /\/\ `--` `--` _______________________________________________ ast-developers mailing list ast-developers@research.att.com https://mailman.research.att.com/mailman/listinfo/ast-developers