PROCPS(3) Library Functions Manual PROCPS(3)

# [BEZEICHNUNG](#BEZEICHNUNG)

procps – API für den Zugriff auf Informationen auf Systemebene im /proc-Dateisystem

# ÜBERSICHT

In dieser Übersicht werden fünf verschiedene Schnittstellen dargestellt, die nach den Dateien benannt sind, auf die sie im Pseudodateisystem /proc zugreifen: **diskstats**, **meminfo**, **slabinfo**, **stat** und **vmstat**.

```
#include <libproc2/benannte_Schnittstelle.h>
```

```
int procps_new   (struct info **info);
int procps_ref   (struct info  *info);
int procps_unref (struct info **info);
```

```
struct result *procps_get (


    struct info *Info,
[   const char *Name,      ]   nur diskstats-API


    enum item Element);
```

```
struct stack *procps_select (


    struct info *Info,
[   const char *Name,      ]   nur diskstats-API


    enum item *Element,


    int numitems);
```

```
struct reaped *procps_reap (


    struct info *Info,
[   enum reap_type was,   ]   nur stat-API


    enum item *Elemente,


    int numitems);
```

```
struct stack **procps_sort (


    struct info *Info,


    struct stack *stacks[],


    int numstacked,


    enum item sortitem,


    enum sort_order order);
```

Die oben genannten Funktionen und Strukturen sind generisch, aber das spezifische **named\_interface** wäre auch Teil aller Bezeichner. Beispielsweise wäre ‘procps\_new’ tatsächlich ‘procps\_**meminfo**\_new’ und ‘info’ wäre wirklich ‘**diskstats**\_info’ usw.

In jedem Header-Dateinamen wird dasselbe **named\_interface** mit dem angehängten Suffix ‘.h’ verwendet.

Linken Sie mit der Option *-lproc2*.

# [BESCHREIBUNG](#BESCHREIBUNG)

## Übersicht

Im Mittelpunkt dieser Schnittstellen steht eine einfache ‘result’-Struktur, die ein ‘item’ plus seinen Wert widerspiegelt (in einer Union mit Standard-C-Sprachtypen als Mitgliedern). Alle ‘result’-Strukturen werden automatisch von der Bibliothek zugewiesen und bereitgestellt.

Durch die Angabe eines Arrays von ‘Elementen’ können diese Strukturen als ‘Stapel’ organisiert werden, wodurch potenziell viele Ergebnisse mit einem einzigen Funktionsaufruf erzielt werden. Somit kann ein ‘Stapel’ als Datensatz variabler Länge betrachtet werden, dessen Inhalt und Reihenfolge ausschließlich vom Benutzer bestimmt werden.

Jede Schnittstelle verfügt über zwei eindeutige Enumeratoren. Die Elemente ‘noop’ und ‘extra’ dienen zur Speicherung von Benutzerwerten. Sie werden nie von der Bibliothek gesetzt, aber das Ergebnis von ‘extra’ wird bei jeder Bibliotheksinteraktion auf Null gesetzt.

Die Headerdatei **named\_interface** ist ein unverzichtbares Dokument während der Entwicklung Ihres Benutzerprogramms. Dort finden Sie die verfügbaren Elemente, deren Rückgabetyp (den Namen des Strukturelements ‘result’) und den Quellcode dieser Werte. Zusätzliche Enumeratoren und Strukturen sind dort ebenfalls dokumentiert.

## [Verwendung](#Verwendung)

Das Folgende wäre eine typische Abfolge von Aufrufen dieser Schnittstellen.

```
1. procps_new()
2. procps_get(), procps_select() oder procps_reap()
3. procps_unref()
```

Die Funktion **get** wird verwendet, um eine ‘result’-Struktur für ein einzelnes ‘Element’ abzurufen. Alternativ steht ein **GET**-Makro zur Verfügung, wenn nur der Rückgabewert von Interesse ist.

Die Funktion **select** kann mehrere ‘result’-Strukturen in einem einzigen ‘Stapel’ abrufen.

Für unvorhersehbare variable Ergebnisse exportieren die Schnittstellen **diskstats**, **slabinfo** und **stat** eine **reap**-Funktion. Diese dient zum Abrufen mehrerer ‘Stapel’, die jeweils mehrere ‘result’-Strukturen enthalten. Optional kann der Benutzer diese Ergebnisse **sortieren**.

Um einen beliebigen ‘stack’ zu nutzen und auf einzelne ‘result’-Strukturen zuzugreifen, ist ein *relative\_enum* erforderlich, wie im Makro **VAL** in der Header-Datei definiert. Solche Werte könnten fest codiert werden, z.B. 0 bis numitems-1. In der Regel wird dieser Bedarf jedoch durch die Erstellung eigener Enumeratoren gedeckt, die der Reihenfolge des ‘items’-Arrays entsprechen.

## [Einschränkungen](#Einschr)

Die Funktionen **new**, **ref**, **unref**, **get** und **select** sind in allen fünf Schnittstellen verfügbar.

Für die Funktionen **new** und **unref** muss die Adresse eines *Info*-Strukturzeigers angegeben werden. Bei **new** muss dieser auf NULL initialisiert worden sein. Bei **unref** wird er auf NULL zurückgesetzt, wenn der Referenzzähler Null erreicht.

Bei der **diskstats**-Schnittstelle identifiziert ein *name*-Parameter der Funktionen **get** und **select** einen Datenträger- oder Partitionsnamen.

With the **slabinfo** interface, *select* results are only meaningful with ‘SLABS’ (plural) enumerators while *reap* results are only meaningful with ‘SLAB’ (singular) enumerators.

Für die **stat**-Schnittstelle gibt ein *what*-Parameter der **reap**-Funktion an, ob Daten nur für CPUs oder sowohl für CPUs als auch für NUMA-Knoten erfasst werden sollen.

Bei Verwendung der Funktion **sort** wären die Parameter *stacks* und *numstacked* normalerweise diejenigen, die in der Struktur ‘reaped’ zurückgegeben werden.

# [RÜCKGABEWERT](#R)

## Funktionen, die ein ‘int’ zurückgeben

Ein Fehler wird durch eine negative Zahl angezeigt, die stets der Kehrwert eines bekannten errno.h-Wertes ist.

Ein Erfolg wird durch den Rückgabewert Null signalisiert. Die Funktionen **ref** und **unref** geben jedoch die aktuelle Referenzanzahl der *info*-Struktur zurück.

## Funktionen, die ein ‘address’ zurückgeben

Ein Fehler wird durch einen NULL-Rückgabezeiger angezeigt, wobei der Grund im formalen errno-Wert zu finden ist.

Der Erfolg wird durch einen Zeiger auf die genannte Struktur angezeigt.

# [FEHLERDIAGNOSE](#FEHLERDIAGNOSE)

Zur Unterstützung der Programmentwicklung gibt es eine zweite Bestimmung, die dazu beitragen kann, sicherzustellen, dass die Mitgliedsreferenzen von ‘result’ den Erwartungen der Bibliothek entsprechen. Sie setzt voraus, dass für den Zugriff auf den Wert von ‘result’ ein in der Header-Datei bereitgestelltes Makro verwendet wird.

Diese Funktion kann über eine der folgenden Methoden aktiviert werden und etwaige Abweichungen werden in **stderr** geschrieben.

1\)

Fügen Sie CFLAGS='-DXTRA\_PROCPS\_DEBUG' zu allen anderen verwendeten ./configure-Optionen hinzu.

2\)

Fügen Sie #include &lt;libproc2/xtra-procps-debug.h&gt; zu jedem Programm hinzu, das die benannte Schnittstelle enthält.

Diese Verifizierungsfunktion verursacht einen erheblichen Mehraufwand. Daher ist es wichtig, dass sie für einen Produktions-/Release-Build *nicht* aktiviert wird.

# [SIEHE AUCH](#SIEHE_AUCH)

[**procps\_misc**(3)](/man/os/procps/procps_misc.3), [**procps\_pids**(3)](/man/os/procps/procps_pids.3), [**proc**(5)](/man/os/procps/proc.5).

2026-03-03 procps-ng

---

Document: procps(3) from procps 4.0.7-r2 (Chainguard OS)
Source: https://downloads.sourceforge.net/project/procps-ng/Production/procps-ng-4.0.7.tar.xz
