=encoding utf8

=head1 NAME

POSIX::1003::Limit - POSIX access to ulimit and rlimit

=head1 SYNOPSIS

  # ULIMIT support

  use POSIX::1003::Limit; # load all names

  use POSIX::1003::Limit qw(ulimit);
  # keys are strings!
  $size = ulimit('UL_GETFSIZE');

  use POSIX::1003::Limit qw(ulimit UL_GETFSIZE);
  $size = UL_GETFSIZE;   # constants are subs

  use POSIX::1003::Limit '%ulimit';
  my $key = $ulimit{UL_GETFSIZE};
  $ulimit{_SC_NEW_KEY} = $key_code;
  $size = ulimit($key);

  print "$_\n" for keys %ulimit;

  # RLIMIT support

  use POSIX::1003::Limit ':rlimit';

  my ($cur, $max, $success) = getrlimit('RLIMIT_CORE');
  my ($cur, $max) = getrlimit('RLIMIT_CORE');
  my $cur = RLIMIT_CORE;

  my $success = setrlimit('RLIMIT_CORE', 1e6, 1e8);
  setrlimit('RLIMIT_CORE', 1e6) or die;
  setrlimit('RLIMIT_CORE', RLIM_SAVED_MAX, RLIM_INFINITY);
  RLIMIT_CORE(1e6, 1e8);

=head1 DESCRIPTION

This module provides access to the "ulimit" (user limit) and "rlimit"
(resource limit) handling.  On most systems, C<ulimit()> is succeeded
by C<rlimit()> hence provides a very limited set of features.

=head1 METHODS

=head1 FUNCTIONS

=head2 Standard POSIX

=over 4

=item B<getrlimit>($resource)

  my ($cur, $max, $success) = getrlimit('RLIMIT_CORE');
  my ($cur, $max) = getrlimit('RLIMIT_CORE');

=item B<setrlimit>( $resource, $cur, [$max] )

  my $success = setrlimit('RLIMIT_CORE', 1e6, 1e8);

=item B<ulimit>($name)

Returns the ulimit value related to the named constant.  The $name
must be a string. C<undef> will be returned when the $name is not
known by the system.

  my $filesize = ulimit('UL_GETFSIZE') || SSIZE_MAX;

=back

=head2 Additional

=over 4

=item B<rlimit_names>()

Returns a list with all known resource names, unsorted.

=item B<ulimit_names>()

Returns a list with all known names, unsorted.

=back

=head1 CONSTANTS

=over 4

=item B<%ulimit>

This exported variable is a tied HASH which maps C<UL_*> names
on unique numbers, to be used with L<ulimit()|POSIX::1003::Limit/"Standard POSIX">.

=item B<%rlimit>

This exported variable is a tied HASH which maps C<RLIMIT_*> names
on unique numbers, to be used with L<getrlimit()|POSIX::1003::Limit/"Standard POSIX"> and L<setrlimit()|POSIX::1003::Limit/"Standard POSIX">.

=back

The following constants where detected on your system when the
module got installed.  The second column shows the value which
where returned at that time.

For ulimit, with a value when it is a getter:

=for comment
#TABLE_ULIMIT_START

  During installation, a symbol table will get inserted here.

=for comment
#TABLE_ULIMIT_END

The constant names for rlimit, with the soft and hard limits that
L<getrlimit()|POSIX::1003::Limit/"Standard POSIX"> returned during installation of the module.

=for comment
#TABLE_RLIMIT_START

  During installation, a symbol table will get inserted here.

=for comment
#TABLE_RLIMIT_END

=head1 SEE ALSO

This module is part of POSIX-1003 distribution version 1.02,
built on November 10, 2020. Website: F<http://perl.overmeer.net/CPAN>.  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-2020 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://dev.perl.org/licenses/>

