The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
=encoding utf8

=head1 NAME

POSIX::1003::FS - POSIX for the file-system

=head1 SYNOPSIS

  use POSIX::1003::FS ':access';
  if(access $fn, R_OK) # $fn is readible?

  use POSIX::1003::FS qw(mkfifo :stat);
  mkfifo($path, S_IRUSR|S_IWUSR) or die $!;

  # Absorbed from Unix::Mknod
  use POSIX::1003::FS qw(mknod major minor makedev);
  use File::stat
  my $st    = stat '/dev/null';
  my $major = major $st->rdev;
  my $minor = minor $st->rdev;
  mknod '/tmp/special', S_IFCHR|0600, makedev($major,$minor+1);

=head1 DESCRIPTION

You may also need L<POSIX::1003::Pathconf|POSIX::1003::Pathconf>.

=head1 FUNCTIONS

=head2 Standard POSIX

=over 4

=item B<access>(FILENAME, FLAGS)

Read C<man filetest> before you start using this function!
Use the C<*_OK> constants for FLAGS.

=item B<lchown>(UID, GID, FILENAMES)

Like C<chown()>, but does not follow symlinks when encountered. Returns
the number of files successfully changed.

B<Warning>, POSIX uses different parameter order:

  # POSIX specification:
  # int lchown(const char *path, uid_t owner, gid_t group);

  # Perl core implementation:
  my $successes = chown($uid, $gid, @filenames);

  use POSIX;
  POSIX::lchown($uid, $gid, $filename) or die $!;

  use POSIX::1003::FS 'lchown';
  my @successes = lchown($uid, $gid, @filenames);

=item B<mkdir>([FILENAME [MASK]])

Simple C<CORE::mkdir()>

=item B<mkfifo>(FILENAME, MODE)

=item B<mknod>(PATH, MODE, DEVICE)

Create a special device node on PATH. Useful symbols for MODE can be
collected from Fcntl (import tag C<:mode>).  The DEVICE number is
a combination from the type (I<major> number), a sequence number and
usage information (combined in a I<minor> number).

=item B<rename>(OLDNAME, NEWNAME)

[0.93] This will use C<CORE::rename()>.  Be warned that Window's C<rename>
implementation will fail when NEWNAME exists, which is not POSIX compliant.
On many platforms, C<rename> between different partitions is not allowed.

=item B<utime>(ATIME, MTIME, FILENAMES)

Simply C<CORE::utime()>

B<Warning,> C<POSIX.pm> uses a different parameter order than core.

  POSIX::utime($filename, $atime, $mtime);
  CORE::utime($atime, $mtime, @filenames);

=back

=head2 Additional

=over 4

=item B<S_ISBLK>(MODE)

=item B<S_ISCHR>(MODE)

=item B<S_ISDIR>(MODE)

example: 

  use File::stat 'stat';
  if(S_ISDIR(stat($fn)->mode)) ...

  if(S_ISDIR((lstat $fn)[2])) ...

=item B<S_ISFIFO>(MODE)

=item B<S_ISLNK>(MODE)

=item B<S_ISREG>(MODE)

=item B<S_ISSOCK>(MODE)

=item B<S_ISWHT>(MODE)

=item B<major>(DEVICE)

=item B<makedev>(MAJOR, MINOR)

Combine MAJOR and MINOR into a single DEVICE number.

 my $device      = (stat $filename)[6];
 my $device_type = major $device;
 my $sequence_nr = minor $device;

 my $device = makedev $major, $minor;
 mknod $specialfile, $mode, $device;

=item B<minor>(DEVICE)

=back

=head1 CONSTANTS

The following constants are exported, shown here with the values
discovered during installation of this module:

=for comment
#TABLE_FSYS_START

  F_OK          0       S_IFLNK       40960   S_ISVTX       512
  FILENAME_MAX  4096    S_IFMT        61440   S_IWGRP       16
  MAX_CANON     255     S_IFREG       32768   S_IWOTH       2
  NAME_MAX      255     S_IFSOCK      49152   S_IWUSR       128
  PATH_MAX      4096    S_IRGRP       32      S_IXGRP       8
  R_OK          4       S_IROTH       4       S_IXOTH       1
  S_IFBLK       24576   S_IRUSR       256     S_IXUSR       64
  S_IFCHR       8192    S_IRWXG       56      W_OK          2
  S_IFDIR       16384   S_IRWXO       7       X_OK          1
  S_IFIFO       4096    S_IRWXU       448     


=for comment
#TABLE_FSYS_END





All functions and constants which start with C<S_*> can be imported
using the C<:stat> tag, including all related C<S_IF*> functions.
The C<*_OK> tags can be imported with C<:access> =cut

=head1 SEE ALSO

This module is part of POSIX-1003 distribution version 0.95.1,
built on August 26, 2013. Website: F<http://perl.overmeer.net>.  The code is based on L<POSIX>, which
is released with Perl itself.  See also L<POSIX::Util> for
additional functionality.

=head1 COPYRIGHTS

Copyrights 2011-2013 on the perl code and the related documentation
 by [Mark Overmeer]. For other contributors see ChangeLog.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
See F<http://www.perl.com/perl/misc/Artistic.html>