JavaScript is required to for searching.
Skip Navigation Links
Exit Print View
Sun QFS and Sun Storage Archive Manager 5.3 Reference Manual     Sun QFS and Sun Storage Archive Manager 5.3 Information Library
search filter icon
search icon

Document Information

Preface

1.  User Commands (Man Pages Section 1)

2.  Maintenance Commands (Man Pages Section 1M)

3.  Library Functions (Man Pages Section 3)

intro_libsam(3)

intro_libsamrpc(3)

qfs_listio(3)

sam_advise(3)

sam_archive(3)

sam_audit(3)

sam_cancelstage(3)

sam_chmed(3)

sam_clear_request(3)

sam_closecat(3)

sam_damage(3)

sam_devstat(3)

sam_devstr(3)

sam_errno(3)

sam_exarchive(3)

sam_export(3)

sam_getcatalog(3)

sam_getfsdata(3)

sam_getfsdisks(3)

sam_import(3)

sam_load(3)

sam_lstat(3)

sam_mig_create_file(3)

sam_mig_mount_media(3)

sam_mig_rearchive(3)

sam_mig_release_device(3)

sam_mig_stage_end(3)

sam_mig_stage_error(3)

sam_mig_stage_file(3)

sam_mig_stage_write(3)

sam_move(3)

sam_odlabel(3)

sam_opencat(3)

sam_readrminfo(3)

sam_rearch(3)

sam_release(3)

sam_request(3)

sam_restore_copy(3)

sam_restore_file(3)

sam_segment(3)

sam_segment_stat(3)

sam_segment_vsn_stat(3)

sam_set_fs_contig(3)

sam_set_fs_thresh(3)

sam_set_state(3)

sam_setfa(3)

sam_settings(3)

sam_ssum(3)

sam_stage(3)

sam_stat(3)

sam_tplabel(3)

sam_unarchive(3)

sam_undamage(3)

sam_unload(3)

sam_unrearch(3)

sam_vsn_stat(3)

usam_mig_cancel_stage_req(3)

usam_mig_initialize(3)

usam_mig_stage_file_req(3)

4.  Library Functions (Man Pages Section 3X)

5.  File Formats (Man Pages Section 4)

6.  Standards, Environment, and Macros (Man Pages Section 5)

7.  Device and Network Interfaces (Man Pages Section 7)

sam_lstat(3)

NAME
     sam_stat, sam_lstat, sam_segment_stat - Gets file or segment
     status

SYNOPSIS
     cc [flag ...] file ...  -L/opt/SUNWsamfs/lib
     -R/opt/SUNWsamfs/lib -lsam [library ...]

     #include "/opt/SUNWsamfs/include/stat.h"

     int sam_stat(const char *path, struct sam_stat *buf, size_t
     bufsize);

     int sam_lstat(const char *path, struct sam_stat *buf, size_t
     bufsize);

     int sam_segment_stat(const char *path, struct sam_stat *buf,
     size_t bufsize);

AVAILABILITY
     SUNWqfs
     SUNWsamfs

DESCRIPTION
     The sam_stat() function returns file system attributes for
     the file to which path points.  The sam_segment_stat()
     function works with segmented files.  It returns attributes
     for the file segments to which path points.

     The sam_lstat() function returns file attributes similar to
     sam_stat().  The difference is that if file is a symbolic
     link, sam_lstat() returns information about the link, while
     sam_stat() returns information about the file or the file's
     segments that the link references.

     If these functions succeed, they write file attributes to
     the structure, or to the array of structures, to which buf
     points.  If they are returning information about a segmented
     file, they write information about the first file segment to
     the first structure in the array of structures.  They write
     information about the second file segment to the second
     structure in the array of structures, etc.

     Note that when sam_stat() and sam_lstat() are executed on a
     segmented file, the functions return information about the
     index inode.

     The sam_stat and sam_lstat functions are supported in Sun
     QFS and SAM-QFS environments.  The sam_segment_stat function
     is supported in Sun QFS and SAM-QFS environments.

OPTIONS
     These functions accept the following arguments:

     path      Specifies the path to the file.  This is the file
               or segmented file for which the file status is to
               be obtained. Read, write, or execute permission of
               the named file is not required, but all
               directories listed in the path leading to the file
               must be searchable.

     buf       Specifies a pointer to a structure into which
               information is placed concerning the file.  The
               functions use one sam_stat structure from this
               argument for each single file or file segment.
               The length of buf, in bytes, must be sized as
               follows:

               bytes =
               number_of_segments * sizeof(struct sam_stat)

               The number_of_segments is 1 for a nonsegmented
               file (used by sam_stat and sam_lstat).  The
               number_of_segments is greater than 1 for a
               segmented file (used by sam_segment_stat).

               For an unsegmented file, buf must be a sam_struct
               structure.

               For a segmented file, buf must be an array of
               sam_struct structures.

     bufsize   Specifies the length of the user's buffer, in
               bytes, to which buf points.

STRUCTURE CONTENTS
     Table 1 and Table 2 show the content of the structure
     pointed to by buf.

              TABLE 1.  Members of struct sam_stat That
                Contain POSIX Standard File Attributes

     Data Type      Field Name   Description
     ulong_t        st_mode      File mode (see mknod(2)
     ulong_t        st_ino       Inode number
     ulong_t        st_dev       ID of device containing the file
     ulong_t        st_nlink     Number of links
     ulong_t        st_uid       Numeric user ID of the file's owner
     ulong_t        st_gid       Numeric group ID of the file's owner
     u_longlong_t   st_size      File size in bytes
     time_t         st_atime     Time of last access
     time_t         st_mtime     Time of last data modification
     time_t         st_ctime     Time of last file status change

     The following list describes Table 1's fields in more
     detail.

     st_mode   The mode of the file as described in mknod(2).  In
               addition to the modes described in mknod(2), the
               mode of a file may also be S_IFLNK if the file is
               a symbolic link.  Note that S_IFLNK can be
               returned only by sam_lstat().

     st_ino    This field uniquely identifies the file in a given
               file system.  The pair st_ino and st_dev uniquely
               identifies regular files.

     st_dev    This field uniquely identifies the file system
               that contains the file.

     st_nlink  This field should be used only by administrative
               commands.

     st_uid    The numeric user ID of the file's owner.

     st_gid    The numeric group ID of the file's owner.

     st_size   For regular files, this is the address of the end
               of the file.

     st_atime  Time when file data was last accessed.  Changed by
               the following functions:  creat, mknod, pipe,
               utime, and read.

     st_mtime  Time when data was last modified.  Changed by the
               following functions:  creat, mknod, pipe, utime,
               and write.

     st_ctime  Time when file status was last changed.  Changed
               by the following functions:  chmod, chown, creat,
               link, mknod, pipe, unlink, utime, and write.

          TABLE 2.  Members of struct sam_stat That Contain
                 Sun QFS and SAM-QFS File Attributes

     Data Type           Field Name           Description
     uint_t              old_attr             Backward compatible, see attr
     time_t              attribute_time       Time attributes last changed
     time_t              creation_time        Time inode created
     time_t              residence_time       Time file changed residence
     struct sam_copy_s   copy[MAX_ARCHIVE]    Array of archive copy information
     uchar_t             cs_algo              Checksum algorithm indicator
     uchar_t             flags                Flags:  staging, stage err, etc.
     uchar_t             stripe_width         Stripe width set by setfa -s or -h
     uchar_t             stripe_group         Stripe group set by setfa -g or -o
     ulong_t             gen                  Inode generation number

     ulong_t             partial_size         Partial size in kilobytes
     dev_t               rdev                 ID of device if S_IFBLK or S_IFCHR
     u_longlong_t        st_blocks            Block count in 512 byte blocks
     ulong_t             segment_size         Segment size in megabytes
     ulong_t             segment_number       Number of this segment
     uint_t              stage_ahead          Number of segment to stage ahead
     uint_t              admin_id             admin ID; inherited from directory
     uint_t              allocahead           Allocate ahead set by setfa -A
     uint_t              obj_depth            Stripe depth (KB) set by setfa -v
     u_longlong_t        csum_val[2]          128 checksum value
     time_t              rperiod_start_time   Time WORM retention period started
     uint_t              rperiod_duration     WORM retention period duration
     u_longlong_t        attr                 File attributes

     The following list describes Table 2's fields in more
     detail.

     attr      Attributes assigned to the file by Sun QFS and
               SAM-QFS functions and operations.

     attribute_time
               Time when the Sun QFS and SAM-QFS attributes last
               changed.  Changed by the following functions:
               sam_archive, sam_release, and sam_stage.  Also
               changed by the automatic archive, release, and
               stage operations.

     creation_time
               Time when the inode was created for the file.

     residence_time
               Time when the file changed residency.  Changed by
               the release and stage operations.

     cs_algo   Indicates the algorithm that is used when
               calculating the data verification value (checksum)
               for the file.  For more information, see ssum(1).

     flags     Flags containing miscellaneous additional
               information about the file.  Includes a bit that
               indicates that a stage is pending or is in
               progress on the file.  Also includes a bit that
               indicates that the last attempt to stage the file
               failed.

     gen       The inode generation number.

RETURN VALUES
     Upon successful completion, a value of 0 is returned.
     Otherwise, a value of -1 is returned and errno is set to
     indicate the error.

ERRORS
     The sam_stat() and sam_lstat() functions fail if one or more
     of the following are true:

     EACCES              Search permission is denied for a
                         component of the path prefix.

     EFAULT              Either buf or path points to an illegal
                         address.

     EINTR               A signal was caught during sam_stat() or
                         sam_lstat() function processing.

     ELOOP               Too many symbolic links were encountered
                         in translating path.

     EMULTIHOP           Components of path require hopping to
                         multiple remote machines and the file
                         system does not allow it.

     ENAMETOOLONG        The length of the path argument exceeds
                         {PATH_MAX}, or the length of path
                         exceeds {NAME_MAX} while
                         {_POSIX_NO_TRUNC} is in effect.

     ENOENT              The named file does not exist or is the
                         null pathname.

     ENOLINK             path points to a remote machine, and the
                         link to that machine is no longer
                         active.

     ENOTDIR             A component of the path prefix is not a
                         directory.

     EOVERFLOW           A component is too large to store in the
                         structure to which buf points.

EXAMPLES
     This example uses sam_segment_stat to obtain the status of a
     segmented file.

     struct sam_stat file_info;
     struct sam_stat *data_seg_info_ptr;
     int number_of_data_segments;
     int result;

     /*
      * Initialize file_info to be all zero bits:
      */
     memset((void *) "file_info, 0, sizeof(struct sam_stat));

     /*
      * Stat the file using the regular sam_stat function:
      */
     result = sam_stat(path, "file_info, sizeof(struct sam_stat));

     if (result != 0) {
         fprintf(stderr, "Error failed to sam stat the file, %s.\n", path);
         exit -70;
     }

     if (SS_ISSEGMENT_F(file_info.attr)) {
         /*
          * File is segmented, how many data segments does it have?
          */

         /*
          * Determine how many complete (full) segments it has:
          */
         number_of_data_segments = file_info.st_size /
                                   (file_info.segment_size * 1048576);

         /*
          * Determine if it has one data segment that isn't "full":
          */
         if (file_info.st_size "gt;
             number_of_data_segments * file_info.segment_size * 1048576) {
             number_of_data_segments++;
         }
     } else {
         /*
          * File isn't segmented
          */
         number_of_data_segments = 1;
     }

     /*
      * Allocate enough memory to hold all of the stat information for each
      * data segment:
      */
     data_seg_info_ptr = (struct sam_stat *) malloc(number_of_data_segments *
                                                    sizeof(struct sam_stat));

     if (data_seg_info_ptr == NULL) {
         fprintf(stderr, "Error failed to allocate memory for data segment stat operation.\n");
         exit -80;
     }

     /*
      * Initialize file_info to be all zero bits:
      */
     memset((void *) data_seg_info_ptr, 0, number_of_data_segments *
                                           sizeof(struct sam_stat));

     if (SS_ISSEGMENT_F(file_info.attr)) {
         /*
          * Use sam_segment_stat to get the stat information for all of the
          * data segments of the file.
          */
         result = sam_segment_stat(path, data_seg_info_ptr,
                                                    number_of_data_segments *
                                                    sizeof(struct sam_stat));
     } else {
         /*
          * File is not segmented, just use the stat information from the
          * sam_stat call
          */
         memcpy((void *) data_seg_info_ptr, (void *)file_info, sizeof(struct sam_stat));
     }

     if (!SS_ISSEGMENT_F(file_info.attr)) {
         number_of_data_segments = 1;
         data_seg_info_ptr = "file_info_ptr;
     }

     /*
      * data_seg_info_ptr now points to an array of sam_stat structures.
      * There is one sam_stat structure for each data segment and they are
      * indexed 0 through  number_of_data_segments - 1.
      *
      * Do not forget to deallocate the memory buffer pointed to by
      * data_seg_info_ptr using free.
      */

SEE ALSO
     ssum(1).

     mknod(2), stat(2).