Provided by: xfslibs-dev_4.3.0+nmu1ubuntu1.1_amd64 bug

NAME

       path_to_handle,  path_to_fshandle,  fd_to_handle, handle_to_fshandle, open_by_handle, readlink_by_handle,
       attr_multi_by_handle,   attr_list_by_handle,   fssetdm_by_handle,   free_handle,    getparents_by_handle,
       getparentpaths_by_handle - file handle operations

C SYNOPSIS

       #include <sys/types.h>
       #include <xfs/handle.h>

       int path_to_handle(char *path, void **hanp, size_t *hlen);

       int path_to_fshandle(char *path, void **hanp, size_t *hlen);

       int fd_to_handle(int fd, void **hanp, size_t *hlen);

       int handle_to_fshandle(void *hanp, size_t hlen, void **fshanp, size_t *fshlen);

       int open_by_handle(void *hanp, size_t hlen, int oflag);

       int readlink_by_handle(void *hanp, size_t hlen, void *buf, size_t bs);

       int attr_multi_by_handle(void *hanp, size_t hlen, void *buf, int rtrvcnt, int flags);

       int attr_list_by_handle(void   *hanp,   size_t   hlen,  char  *buf,  size_t  bufsiz,  int  flags,  struct
              attrlist_cursor *cursor);

       int fssetdm_by_handle(void *hanp, size_t hlen, struct fsdmidata *fssetdm);

       void free_handle(void *hanp, size_t hlen);

       int getparents_by_handle(void *hanp, size_t hlen, parent_t *buf, size_t bufsiz, parent_cursor_t  *cursor,
              unsigned int *count, unsigned int *more);

       int getparentpaths_by_handle(void  *hanp,  size_t  hlen,  parent_t  *buf,  size_t bufsiz, parent_cursor_t
              *cursor, unsigned int *count, unsigned int *more);

DESCRIPTION

       These functions provide a way to perform certain filesystem operations without using a file descriptor to
       access  filesystem objects. They are intended for use by a limited set of system utilities such as backup
       programs. They are supported only by the XFS filesystem.  Link with the libhandle library to access these
       functions.

       A  handle,  hanp, uniquely identifies a filesystem object or an entire filesystem.  There is one and only
       one handle per filesystem or filesystem object.  Handles consist of some number of bytes. The size  of  a
       handle  (i.e.  the number of bytes comprising it) varies by the type of handle and may vary for different
       objects of the same type.  The content of a handle is opaque to applications.  Since  handle  sizes  vary
       and  their  contents  are  opaque,  handles  are described by two quantities, a pointer (hanp) and a size
       (hlen).  The size, hlen, indicates the number of bytes in the handle which are pointed to by the pointer.

       The path_to_handle() function returns the handle for the object given by the path argument. If the  final
       component of the path name is a symbolic link, the handle returned is that of the link itself.

       The  path_to_fshandle()  function  returns the handle for the filesystem in which the object given by the
       path argument resides.

       The fd_to_handle() function returns the handle for the object referenced by the fd argument,  which  must
       be a valid file descriptor.

       The handle_to_fshandle() function returns the handle for the filesystem in which the object referenced by
       the handle given by the hanp and hlen arguments resides.

       The open_by_handle() function opens a file descriptor for the object  referenced  by  a  handle.   It  is
       analogous and identical to open(2) with the exception of accepting handles instead of path names.

       The readlink_by_handle() function returns the contents of a symbolic link referenced by a handle.

       The  attr_multi_by_handle()  function manipulates multiple user attributes on a filesystem object.  It is
       analogous and identical to attr_multif(3) except that a handle is specified instead of a file descriptor.

       The attr_list_by_handle() function returns the names of the user attributes of a filesystem  object.   It
       is  analogous  and  identical  to  attr_listf(3)  except  that  a  handle  is specified instead of a file
       descriptor.

       The fssetdm_by_handle() function sets the di_dmevmask and di_dmstate fields in an XFS on-disk  inode.  It
       is  analogous  to  the  XFS_IOC_FSSETDM xfsctl(3) command, except that a handle is specified instead of a
       file.

       The free_handle() function frees the storage allocated for handles returned by the  following  functions:
       path_to_handle(), path_to_fshandle(), fd_to_handle(), and handle_to_fshandle().

       The  getparents_by_handle()  function  returns  an  array of parent_t structures for each hardlink to the
       inode represented by the given handle.  The parent structure encodes the parent inode number,  generation
       number and the basename of the link.  This function is not operational on Linux.

       The  getparentpaths_by_handle()  function is identical to the getparents_by_handle() function except that
       instead of returning the basename it returns the path of the link up to the mount point.   This  function
       is also not operational on Linux.

RETURN VALUE

       The  function  free_handle()  has  no  failure  indication. The other functions return the value 0 to the
       calling process if they succeed; otherwise, they return the value -1 and set errno to indicate the error.

ERRORS

       EACCES Search permission was denied for a component of path.

       EBADF  fd is not a valid and open file descriptor.

       EFAULT An argument pointed to an invalid address.

       EINVAL path is in a filesystem that does not support these functions.

       ELOOP  Too many symbolic links were encountered in translating the path name.

       ENAMETOOLONG
              A component of path or the entire length of path exceeds filesystem limits.

       ENOENT A component of path does not exist.

       EPERM  The caller does not have sufficient privileges.

SEE ALSO

       open(2), readlink(2), attr_multi(3), attr_list(3), xfsctl(3), xfs(5).

                                                                                                       HANDLE(3)