HP 3000 Manuals

chmod [ MPE/iX Developer's Kit Reference Manual Volume I ] MPE/iX 5.0 Documentation


MPE/iX Developer's Kit Reference Manual Volume I

chmod 

Changes file access permissions.

Syntax 

     #include <sys/types.h>
     #include <sys/stat.h>
     int chmod (const char *pathname, mode_t mode);

Parameters 

pathname   A pointer to a string containing the pathname of a file or
           directory whose access permissions are to be modified.  The
           pathname must be terminated by a null character.

mode       New access permissions.  Access permission bits are set by
           ORing any combination of the following macros:

           S_IRWXU       Set file owner class read, write, and execute
                         (if a file) or search (if a directory)
                         permission bits.

           S_IRUSR       Set file owner class read permission bit.

           S_IWUSR       Set file owner class write permission bit.

           S_IXUSR       Set file owner class execute (if a file) or
                         search (if a directory) permission bit.

           S_IRWXG       Set file group class read, write, and execute
                         (if a file) or search (if a directory)
                         permission bits.

           S_IRGRP       Set file group class read permission bit.

           S_IWGRP       Set file group class write permission bit.

           S_IXGRP       Set file group class execute (if a file) or
                         search (if a directory) permission bit.

           S_IRWXO       Set file other class read, write, and execute
                         (if a file) or search (if a directory)
                         permission bits.

           S_IROTH       Set file other class read permission bit.

           S_IWOTH       Set file other class write permission bit.

           S_IXOTH       Set file other class execute (if a file) or
                         search (if a directory) permission bit.

           Unused bits of the mode parameter not associated with access
           permissions must contain zeros, or an error occurs.

Return Values 

0          Success.

-1         An error occurred.  Access permission bits are not changed,
           and errno is set to indicate the error condition.

Description 

The chmod() function sets the file access permission bits of the file or
directory named in pathname to the bits specified in mode.  Access
permissions can be modified only when one of the following conditions is
true:

   *   The user associated with the calling process is the file owner (a
       user whose effective UID matches the UID of the file).
   *   The user associated with the calling process has appropriate
       privileges, defined to be one of the following:
          *   a user whose GID matches the GID of the file and who has
              the MPE/iX account manager (AM) user capability
          *   a user who has the MPE/iX system manager (SM) user
              capability

Upon successful completion, chmod() marks for update the st_ctime time
field of the file.

Implementation Considerations 

Refer to the EIMPL, EINVAL, and EFAULT error descriptions below.

The S_ISUID and S_ISGID bits are not currently supported.

Changes to file access permission bits do not affect access to pathname 
through open file descriptors already associated with pathname at the
time of the chmod() call.

If bits in mode other than access permission bits are set to a nonzero
value, an error is returned and access permission bits are not changed.

Errors 

If an error occurs, errno is set to one of the following values:

EACCES            CAUSE           The calling process does not have search permission
                                  to a component of the pathname.
                  ACTION          Make sure that the calling process has search
                                  permission to all component directories in the
                                  pathname.

EFAULT            CAUSE           The system detected a NULL or bad address in
                                  attempting to use pathname, or the pathname was not
                                  terminated by a null character.
                  ACTION          Make sure that the pointer is correctly initialized.

EIMPL             CAUSE           One of the following:
                                     *   The pathname begins with two slash characters
                                         (//).
                                     *   The unused bits of the mode parameter do not
                                         contain zeros.
                  ACTION          One of the following:
                                     *   Do not begin pathnames with two slash
                                         characters (//).
                                     *   Set to zero all mode bits that are not access
                                         permission bits.

EINVAL            CAUSE           The pathname parameter specified the root directory,
                                  an MPE/iX account, or an MPE/iX group.
                  ACTION          Do not attempt to change the access permission bits
                                  of the root directory, an MPE/iX account, or an
                                  MPE/iX group.

          Table 4-0.  (cont.) 

ENAMETOOLONG      CAUSE           One of the following:
                                     *   The length of the pathname exceeds the
                                         {PATH_MAX} limit (defined in the file
                                         <limits.h>).
                                     *   A component of the pathname is longer than
                                         {NAME_MAX} (defined in <limits.h>), and
                                         {_POSIX_NO_TRUNC} is in effect for that
                                         directory.
                  ACTION          Make sure that both the component's length and the
                                  full pathname length do not exceed the {NAME_MAX} or
                                  {PATH_MAX} limits.
ENOENT            CAUSE           The specified file does not exist, or pathname points
                                  to an empty string.
                  ACTION          Specify an existing filename.

ENOTDIR           CAUSE           A component of the pathname is not a directory.
                  ACTION          Specify a valid pathname.

EPERM             CAUSE           One of the following:
                                     *   The calling process does not have the MPE/iX
                                         process handling (PH) capability.
                                     *   The calling process has outstanding switches
                                         to CM code, has set critical mode, has
                                         outstanding NOWAITIO, or is holding an
                                         operating system internal resource, or the
                                         calling process is in a Procedure Exit
                                         handler.
                  ACTION          One of the following:
                                     *   Link the program file with the MPE/iX PH
                                         capability.
                                     *   Do not execute execl() when the calling
                                         process has outstanding switches to CM code,
                                         has set critical mode, has outstanding
                                         NOWAITIO, or is holding an operating system
                                         internal resource, or in a Procedure Exit
                                         handler.

See Also 

chown(), mkdir(), stat(), fstat(), <sys/stat.h>, POSIX.1 (Section 5.6.4)



MPE/iX 5.0 Documentation