from ksh did you try
getconf name ~{fd}
getconf name /dev/fd/${fd}
On Tue, 17 Sep 2013 18:53:26 +0200 Lionel Cons wrote:
> Forwarding a question from a coworker:
> How can I access fpathconf() via getconf(1)?
> Lionel
> ---------- Forwarded message ----------
> From: Roland Mainz <[email protected]>
> Date: 31 August 2013 02:31
> Subject: Re: [ast-developers] AT&T Software Technology ast alpha
> software download update
> To: "[email protected]" <[email protected]>
> Cc: [email protected], олÑга кÑÑжановÑкаÑ
> <[email protected]>, Glenn Fowler <[email protected]>
> On Sat, Aug 31, 2013 at 12:14 AM, Roland Mainz <[email protected]>
> wrote:
> > On Fri, Aug 30, 2013 at 10:41 PM, Glenn Fowler <[email protected]>
> > wrote:
> >> On Fri, 30 Aug 2013 22:25:34 +0200 Lionel Cons wrote:
> >>> On 30 August 2013 21:01, олÑга кÑÑжановÑкаÑ
> >>> <[email protected]> wrote:
> >>> > For scripts it may be better to extend /dev/file/ to have
> >>> > /dev/file/xattr:
> >>> >
> >>> > ksh -c 'mkdir -p foo2 ; redirect {d}<foo2/ ; redirect
> >>> > {n}<>/dev/file/xattr:/dev/fd/$d/myxattr ; print -u$n "bla" ; cd -@
> >>> > foo2 ; ls ; cat myxattr' myxattr SUNWattr_ro SUNWattr_rw
> >>> > bla
> >>
> >>> Do you have a patch for that? It sounds you found a middle way which
> >>> might satisfy Glenn's love for /dev/file and marry it with a sane
> >>> approach to access files in xattr directories.
> >>
> >> I'm looking at this over the long US weekend and am having
> >> an off-list discussion picking olga's brain -- this will be resolved
> >> one way or another tuesday
> >>
> >> my "love" isn't so much /dev/file but rather an ast C and script
> >> abstraction the contains the effects of attribute directories
> >
> > Grumpf... I wish it would be easy. The best advice I can offer (after
> > today's) mayhem: Please just accept that accessing NFSv4 extended
> > attributes only works through a file descriptor for now (the
> > "advantage" is that it makes an emulation on Windows easier because
> > every acces must go through a fd).
> > If someone wishes to have an absolute path IMO the best option is to
> > return /proc/$$/fd/$fd/ because it ensures at least access for the
> > current and other processes as long as the fd is valid.
> [snip]
> One more datapoint (since Olga asked and forwarded an email): NFSv4
> XATTR directories support subdirectories but only if the underlying
> filesystem supports it (Solaris "zfs" and "ufs" don't... I'm not sure
> about swap filesystem "tmpfs").
> Think about the NFSv4 XATTR directories like a "branch" of the normal
> filesystem which has been "cut off". All normal operations apply
> (except getting XATTR dirs within XATTR dirs, e.g. nesting is not
> allowed), including hard- and softlinks, pipes, fifos and
> subdirectories if the underlying filesystems support it (Sun tried to
> make it "easier" for itself and treats the XATTR directories as plain
> single-level data storage, e.g. doesn't support softlinks, pipe/fifos,
> subdirs and softlinks but does support hardlinks for zfs and ufs;
> other filesystems are not required to be so restrictive) but all
> references are contained within this "cut off branch of the
> filesystem", e.g. hardlinks can only reference files inside the XATTR
> directory and not files outside it (the same restriction would apply
> to relative softlinks).
> BTW: Last XATTR hint for today: See |fpathconf(2)| ... the *XATTR*
> attributes:
> -- snip --
> System Calls fpathconf(2)
> NAME
> fpathconf, pathconf - get configurable pathname variables
> SYNOPSIS
> #include <unistd.h>
> long fpathconf(int fildes, int name);
> long pathconf(const char *path, int name);
> DESCRIPTION
> The fpathconf() and pathconf() functions determine the
> current value of a configurable limit or option ( variable )
> that is associated with a file or directory.
> For pathconf(), the path argument points to the pathname of
> a file or directory.
> For fpathconf(), the fildes argument is an open file
> descriptor.
> The name argument represents the variable to be queried
> relative to that file or directory. The variables in the
> following table come from <limits.h> or <unistd.h> and the
> symbolic constants, defined in <unistd.h>, are the
> corresponding values used for name:
> System Calls fpathconf(2)
> SunOS 5.11 Last change: 1 Sep 2009 2
> System Calls fpathconf(2)
> _______________________________________________________________________
> Variable Value of name Notes
> _______________________________________________________________________
> {ACL_ENABLED} _PC_ACL_ENABLED 10
> _______________________________________________________________________
> {FILESIZEBITS} _PC_FILESIZEBITS 3,4
> _______________________________________________________________________
> {LINK_MAX} _PC_LINK_MAX 1
> _______________________________________________________________________
> {MAX_CANON} _PC_MAX_CANON 2
> _______________________________________________________________________
> {MAX_INPUT} _PC_MAX_INPUT 2
> _______________________________________________________________________
> {MIN_HOLE_SIZE} _PC_MIN_HOLE_SIZE 11
> _______________________________________________________________________
> {NAME_MAX} _PC_NAME_MAX 3, 4
> _______________________________________________________________________
> {PATH_MAX} _PC_PATH_MAX 4,5
> _______________________________________________________________________
> {PIPE_BUF} _PC_PIPE_BUF 6
> _______________________________________________________________________
> {POSIX_ALLOC_SIZE_MIN} _PC_ALLOC_SIZE_MIN
> _______________________________________________________________________
> {POSIX_REC_INCR_XFER_SIZE} _PC_REC_INCR_XFER_SIZE
> _______________________________________________________________________
> {POSIX_REC_MAX_XFER_SIZE} _PC_REC_MAX_XFER_SIZE
> _______________________________________________________________________
> {POSIX_REC_MIN_XFER_SIZE} _PC_REC_MIN_XFER_SIZE
> _______________________________________________________________________
> {POSIX_REC_XFER_ALIGN} _PC_REC_XFER_ALIGN
> _______________________________________________________________________
> {SYMLINK_MAX} _PC_SYMLINK_MAX 4, 9
> _______________________________________________________________________
> {XATTR_ENABLED} _PC_XATTR_ENABLED 1
> _______________________________________________________________________
> {SATTR_ENABLED} _PC_SATTR_ENABLED
> _______________________________________________________________________
> {XATTR_EXISTS} _PC_XATTR_EXISTS 1
> _______________________________________________________________________
> {SATTR_EXISTS} _PC_SATTR_EXISTS
> _______________________________________________________________________
> {ACCESS_FILTERING} _PC_ACCESS_FILTERING 12
> _______________________________________________________________________
> _POSIX_CHOWN_RESTRICTED _PC_CHOWN_RESTRICTED 7
> _______________________________________________________________________
> _POSIX_NO_TRUNC _PC_NO_TRUNC 3, 4
> _______________________________________________________________________
> _POSIX_VDISABLE _PC_VDISABLE 2
> _______________________________________________________________________
> _POSIX_ASYNC_IO _PC_ASYNC_IO 8
> _______________________________________________________________________
> _POSIX_PRIO_IO _PC_PRIO_IO 8
> SunOS 5.11 Last change: 1 Sep 2009 3
> System Calls fpathconf(2)
> _______________________________________________________________________
> | _POSIX_SYNC_IO | _PC_SYNC_IO | 8 |
> |____________________________|__________________________|______________|
> | _POSIX_TIMESTAMP_RESOLUTION| _PC_TIMESTAMP_RESOLUTION| 1 |
> |____________________________|__________________________|______________|
> Notes:
> 1. If path or fildes refers to a directory, the value
> returned applies to the directory itself.
> 2. If path or fildes does not refer to a terminal
> file, it is unspecified whether an implementation
> supports an association of the variable name with
> the specified file.
> 3. If path or fildes refers to a directory, the value
> returned applies to filenames within the directory.
> 4. If path or fildes does not refer to a directory, it
> is unspecified whether an implementation supports
> an association of the variable name with the speci-
> fied file.
> 5. If path or fildes refers to a directory, the value
> returned is the maximum length of a relative path-
> name when the specified directory is the working
> directory.
> 6. If path refers to a FIFO, or fildes refers to a
> pipe or FIFO, the value returned applies to the
> referenced object. If path or fildes refers to a
> directory, the value returned applies to any FIFO
> that exists or can be created within the directory.
> If path or fildes refers to any other type of file,
> it is unspecified whether an implementation sup-
> ports an association of the variable name with the
> specified file.
> 7. If path or fildes refers to a directory, the value
> returned applies to any files, other than direc-
> tories, that exist or can be created within the
> directory.
> 8. If path or fildes refers to a directory, it is
> unspecified whether an implementation supports an
> association of the variable name with the specified
> file.
> 9. If path or fildes refers to a directory, the value
> SunOS 5.11 Last change: 1 Sep 2009 4
> System Calls fpathconf(2)
> returned is the maximum length of the string that a
> symbolic link in that directory can contain.
> 10. If path or fildes refers to a file or directory in
> a file system that supports ACLs, the value
> returned is the bitwise inclusive OR of the follow-
> ing flags associated with ACL types supported by
> the file system; otherwise 0 is returned.
> _ACL_ACE_ENABLED The file system supports ACE
> ACLs.
> _ACL_ACLENT_ENABLED The file system supports UFS
> aclent ACLs.
> 11. If a filesystem supports the reporting of holes
> (see lseek(2), pathconf() and fpathconf() return a
> positive number that represents the minimum hole
> size returned in bytes. The offsets of holes
> returned will be aligned to this same value. A spe-
> cial value of 1 is returned if the filesystem does
> not specify the minimum hole size but still reports
> holes.
> 12. If path or fildes refers to a directory and the
> file system in which the directory resides supports
> access filtering, a non-zero value is returned.
> Otherwise, 0 is returned.
> RETURN VALUES
> If name is an invalid value, both pathconf() and fpathconf()
> return -1 and errno is set to indicate the error.
> If the variable corresponding to name has no limit for the
> path or file descriptor, both pathconf() and fpathconf()
> return -1 without changing errno. If pathconf() needs to use
> path to determine the value of name and pathconf() does not
> support the association of name with the file specified by
> path, or if the process did not have appropriate privileges
> to query the file specified by path, or path does not exist,
> pathconf() returns -1 and errno is set to indicate the
> error.
> If fpathconf() needs to use fildes to determine the value of
> name and fpathconf() does not support the association of
> name with the file specified by fildes, or if fildes is an
> invalid file descriptor, fpathconf() returns -1 and errno is
> set to indicate the error.
> SunOS 5.11 Last change: 1 Sep 2009 5
> System Calls fpathconf(2)
> Otherwise pathconf() or fpathconf() returns the current
> variable value for the file or directory without changing
> errno. The value returned will not be more restrictive than
> the corresponding value available to the application when it
> was compiled with <limits.h> or <unistd.h>.
> ERRORS
> The pathconf() function will fail if:
> EINVAL The value of name is not valid.
> ELOOP A loop exists in symbolic links encountered during
> resolution of the path argument.
> The fpathconf() function will fail if:
> EINVAL The value of name is not valid.
> The pathconf() function may fail if:
> EACCES Search permission is denied for a component
> of the path prefix.
> EINVAL An association of the variable name with the
> specified file is not supported.
> ENAMETOOLONG The length of the path argument exceeds
> {PATH_MAX} or a pathname component is longer
> than {NAME_MAX}.
> ENAMETOOLONG As a result of encountering a symbolic link
> in resolution of the path argument, the
> length of the substituted pathname string
> exceeded {PATH_MAX}.
> ENOENT A component of path does not name an exist-
> ing file or path is an empty string.
> ENOTDIR A component of the path prefix is not a
> directory.
> SunOS 5.11 Last change: 1 Sep 2009 6
> System Calls fpathconf(2)
> The fpathconf() function may fail if:
> EBADF The fildes argument is not a valid file descrip-
> tor.
> EINVAL An association of the variable name with the
> specified file is not supported.
> USAGE
> The {SYMLINK_MAX} variable applies only to the fpathconf()
> function.
> ATTRIBUTES
> See attributes(5) for descriptions of the following attri-
> butes:
> ____________________________________________________________
> | ATTRIBUTE TYPE | ATTRIBUTE VALUE |
> |_____________________________|_____________________________|
> | Interface Stability | Committed |
> |_____________________________|_____________________________|
> | MT-Level | Async-Signal-Safe |
> |_____________________________|_____________________________|
> | Standard | See standards(5). |
> |_____________________________|_____________________________|
> SEE ALSO
> lseek(2), confstr(3C), limits.h(3HEAD), sysconf(3C), attri-
> butes(5), standards(5)
> -- snip --
> ----
> Bye,
> Roland
> --
> __ . . __
> (o.\ \/ /.o) [email protected]
> \__\/\/__/ MPEG specialist, C&&JAVA&&Sun&&Unix programmer
> /O /==\ O\ TEL +49 641 3992797
> (;O/ \/ \O;)
> --
> Lionel
_______________________________________________
ast-developers mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-developers