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