ulimit-Subroutine

Zweck

Legt Benutzergrenzwerte fest und ruft diese ab.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

Die Syntax für das Unterprogramm ulimit lautet, wenn der Command-Parameter einen Wert von GET_FSIZE oder SET_FSIZE angibt:

#include <ulimit.h>
long int ulimit ( Command NewLimit)
int Command;
off_t NewLimit;

Die Syntax für das Unterprogramm ulimit, wenn der Parameter Command einen Wert von GET_DATALIM, SET_DATALIM, GET_STACKLIM, SET_STACKLIM, GET_REALDIR oder SET_REALDIR angibt, lautet:

#include <ulimit.h>
long int ulimit (CommandNewLimit)
int Command;
unsigned long NewLimit;

Beschreibung

Das Unterprogramm ulimit steuert Prozessgrenzen.

Auch bei entfernten Dateien werden die Werte des Unterprogramms ulimit des Prozesses auf dem Client-Knoten verwendet.

Anmerkung: Die Erhöhung des ulimit-Werts für Daten erhöht nicht unbedingt den Wert für die Programmunterbrechung. Wenn die richtigen Speichersegmente zum Zeitpunkt des Programmladevorgangs nicht initialisiert werden, lässt das Erhöhen der Speicherbegrenzung keinen Zugriff auf diesen Speicher zu. Auch ohne Initialisierung dieser Speichersegmente ist der Wert, der nach einer solchen Änderung zurückgegeben wird, möglicherweise nicht der richtige Unterbrechungswert. Wenn Ihr Datengrenzwert RLIM_INFINITY ist, geht dieser Wert nie über die Segmentgröße hinaus, selbst wenn diese Daten verfügbar sind. Verwenden Sie die Option -bmaxdata des Befehlsld, um diese Segmente beim Laden einzurichten.

Wenn Sie fsize für eine 32-Bit-Anwendung auf 2G oder höher setzen, wird dies als unbegrenzt behandelt.

Parameter

Element Beschreibung
Befehl Gibt die Form des Steuerelements an Die folgenden Befehlsparameterwerte erfordern, dass der NewLimit als off_t-Struktur deklariert wird:
GET_FSIZE (1)
Gibt die Größenbegrenzung für Prozessdateien zurück Das Limit wird in Einheiten von UBSIZE-Blöcken angegeben (siehe die Datei sys/param.h ) und wird an Kindprozesse vererbt. Dateien beliebiger Größe können gelesen werden. Die Größenbegrenzung der Prozessdatei wird in der durch den Parameter NewLimit angegebenen off_t-Struktur zurückgegeben.
SET_FSIZE (2)
Setzt das Größenlimit der Prozessdatei auf den Wert in der off_t-Struktur, der durch den Parameter NewLimit angegeben wird. Jeder Prozess kann diesen Grenzwert verringern, aber nur ein Prozess mit Rootberechtigung kann den Grenzwert erhöhen. Die neue Dateigrößenbegrenzung wird zurückgegeben.

Die folgenden Command -Parameterwerte erfordern, dass der NewLimit -Parameter als ganze Zahl deklariert wird:

GET_DATALIM (3)
Gibt den maximal möglichen Bruchwert zurück (wie in den Unterprogrammen brk oder sbrk beschrieben).
SET_DATALIM (1004)
Legt den maximal möglichen Pausenwert fest (beschrieben in den Unterroutinen brk und sbrk ). Gibt den neuen maximalen Gruppenwechselwert zurück, bei dem es sich um den Parameter NewLimit handelt, der auf die nächste Seitenbegrenzung aufgerundet wird.
Anmerkung: Wenn ein Programm unter Verwendung des Modells für große Adressräume ausgeführt wird, versucht das Betriebssystem, den veränderlichen Grenzwert für die Datenmenge bei Bedarf zu ändern, um ihn an den Wert für Max. Daten anzupassen. Wenn der maxdata-Wert größer ist als die aktuelle harte Grenze für die Datengröße, wird das Programm entweder nicht ausgeführt, wenn die Umgebungsvariable ' XPG_SUS_ENV auf ON gesetzt ist, oder die weiche Grenze wird auf die aktuelle harte Grenze gesetzt. Wenn der maxdata-Wert kleiner ist als die Größe der statischen Daten des Programms, wird das Programm nicht ausgeführt.
GET_STACKLIM (1005)
Gibt die niedrigste gültige Stackadresse zurück
Anmerkung: Stacks wachsen von hohen Adressen zu niedrigen Adressen.
SET_STACKLIM (1006)
Legt die niedrigste gültige Stackadresse fest. Gibt die neue gültige Mindeststackadresse zurück, bei der es sich um den Parameter NewLimit handelt, der auf die nächste Seitenbegrenzung abgerundet wird.
GET_REALDIR (1007)
Gibt den aktuellen Wert des Leseflags für das reale Verzeichnis zurück. Wenn dieses Flag den Wert 0 hat, gibt ein read-Systemaufruf (oder readx mit dem Extension-Parameterwert 0) gegen ein Verzeichnis Einträge in einem festen Format zurück, die mit dem System V UNIX-Betriebssystem kompatibel sind. Andernfalls gibt ein read-Systemaufruf (oder readx mit Extension-Parameterwert 0) gegen ein Verzeichnis das zugrunde liegende physische Format zurück.
SET_REALDIR (1008)
Setzt den Wert des Leseflags für das reale Verzeichnis. Wenn der Parameter NewLimit den Wert 0 hat, wird dieses Kennzeichen gelöscht; andernfalls wird es gesetzt. Der alte Wert des Leseflags für das reale Verzeichnis wird zurückgegeben.
NewLimit Gibt den neuen Grenzwert an Der Wert und der Datentyp oder die Struktur des Parameters NewLimit hängen vom Wert des Parameters Befehl ab, der verwendet wird.

Beispiele

Um die Größe des Stacks um 4096 Bytes zu erhöhen (verwenden Sie4096oderPAGESIZE), und setzen Sie diercauf die neue niedrigste gültige Stack-Adresse, geben Sie ein:

rc = ulimit(SET_STACKLIM, ulimit(GET_STACKLIM, 0) - 4096);

Rückgabewerte

Nach erfolgreicher Beendigung wird der Wert des angeforderten Grenzwerts zurückgegeben. Andernfalls wird ein Wert von -1 zurückgegeben und die globale Variable errno wird gesetzt, um den Fehler anzuzeigen.

Alle Rückgabewerte sind zulässig, wenn die Unterroutine ulimit erfolgreich ist. Um auf Fehlersituationen zu prüfen, sollte eine Anwendung die globale Variable errno auf 0 setzen, bevor sie das Unterprogramm ulimit aufruft. Wenn das Unterprogramm ulimit den Wert -1 zurückgibt, sollte die Anwendung die globale Variable errno überprüfen, um sicherzustellen, dass sie ungleich Null ist.

Fehlercodes

Das Unterprogramm ulimit ist nicht erfolgreich und der Grenzwert bleibt unverändert, wenn eine der folgenden Bedingungen erfüllt ist:

Element Beschreibung
EPERM Ein Prozess ohne Rootberechtigung versucht, die Dateigrößenbegrenzung zu erhöhen.
EINVAL Der Parameter Command ist ein anderer Wert als GET_FSIZE, SET_FSIZE, GET_DATALIM, SET_DATALIM, GET_STACKLIM, SET_STACKLIM, GET_REALDIR oder SET_REALDIR.