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

NAME

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

INHERITANCE

 POSIX::1003::FS
   is a POSIX::1003::Module

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);

DESCRIPTION

You may also need POSIX::1003::Pathconf.

See documentation in the base class.

METHODS

See documentation in the base class.

POSIX::1003::FS->exampleValue(NAME)

See "METHODS" in POSIX::1003::Module

$obj->import()

See "METHODS" in POSIX::1003::Module

FUNCTIONS

Standard POSIX

access(FILENAME, FLAGS)

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

lchown(UID, GID, FILENAMES)

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

Be Warned that the POSIX specification uses different parameter order. For Perl was decided to accept a list of filenames. Passing more than one filename, however, hinders correct error reporting.

  # 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);
mkdir([FILENAME [MASK]])

Simple CORE::mkdir()

mkfifo(FILENAME, MODE)
mknod(PATH, MODE, DEVICE)

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

rename(OLDNAME, NEWNAME)

[0.93] Give a file or directory a new name, the basis of the UNIX mv ('move') command. This will use CORE::rename().

Be warned that Window's rename implementation will fail when NEWNAME exists. That behavior is not POSIX compliant. On many platforms (especially the older), a rename between different partitions is not allowed.

utime(ATIME, MTIME, FILENAMES)

Simply CORE::utime()

Be Warned that POSIX.pm uses a different parameter order than CORE.

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

Additional

S_ISBLK(MODE)
S_ISCHR(MODE)
S_ISDIR(MODE)

example:

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

  if(S_ISDIR((lstat $fn)[2])) ...
S_ISFIFO(MODE)
S_ISLNK(MODE)
S_ISREG(MODE)
S_ISSOCK(MODE)
S_ISVTX(MODE)
S_ISWHT(MODE)
major(DEVICE)
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;
minor(DEVICE)

CONSTANTS

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

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

All functions and constants which start with S_* can be imported using the :stat tag, including all related S_IS* functions.

The *_OK tags can be imported with :access

Permission flags get loaded with :perms.

SEE ALSO

This module is part of POSIX-1003 distribution version 0.98, built on December 03, 2013. Website: http://perl.overmeer.net. The code is based on POSIX, which is released with Perl itself. See also POSIX::Util for additional functionality.

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 http://www.perl.com/perl/misc/Artistic.html