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

Reply via email to