On 17 September 2013 20:49, Glenn Fowler <[email protected]> wrote:
>
> from ksh did you try
>
>         getconf name ~{fd}
>         getconf name /dev/fd/${fd}

Forwarding the feedback from a coworker:
It may work for AST but it is not legal: ~{fd} expands to /proc, which
is a filesystem, and /dev/fd is a filesystem on Solaris too. What
happens if I want to find the pathconf properties of /proc or /dev/fd
in a POSIX conforming way?

Lionel

> 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
>



-- 
Lionel
_______________________________________________
ast-developers mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-developers

Reply via email to