Reentrante POSIX-Thread-Funktionen (Gruppe _POSIX_THREAD_SAVE_FUNCTIONS)
Bei diesen Funktionen mit Suffix „_r“ im Funktionsnamen handelt es sich um die reentrante Variante der entsprechenden Funktion ohne Suffix „_r“. Da diese Funktionen auch für das Arbeiten ohne Threads nützlich sind, werden sie auch in der nicht threadfesten Variante des CRTE ($.SYSLNK.CRTE) ausgeliefert.
„asctime_r - Datum und Uhrzeit threadsicher in Zeichenkette umwandeln“
„ctime_r - Datum und Uhrzeit threadsicher in Zeichenkette umwandeln“
„getgrgid_r - Gruppendateieintrag für eine Gruppen-ID threadsicher ermitteln“
„getgrnam_r - Gruppendateieintrag für Gruppenname threadsicher ermitteln“
„getlogin_r - Benutzerkennung threadsicher ermitteln“
„getpwnam_r - Benutzernamen threadsicher ermitteln“
„gmtime_r - Datum und Uhrzeit threadsicher in UTC umwandeln“
„localtime_r - Datum und Uhrzeit threadsicher in Zeichenkette umwandeln“
„rand_r - Pseudo-Zufallszahlen (int) threadsicher generieren“
„readdir_r - aus Dateiverzeichnis threadsicher lesen“
„strtok_r - Zeichenkette threadsicher in Tokens zerlegen“
„ttyname_r - Pfadnamen eines Terminals threadsicher ermitteln“
Bei der Arbeit mit Threads sind diese Funktionen anstelle der korrespondierenden Funktionen, die kein Suffix „_r“ enthalten, zu verwenden. Der Einsatz der genannten Funktionen ist jedoch auch in einer Nicht-Thread-Umgebung vorteilhaft.
POSIX-THREAD-Funktionen zum Sperren und Entsperren von Objekten des Typs (FILE*)
„flockfile, ftrylockfile, funlockfile - Funktionen zum Sperren der Standardein/-ausgabe“
POSIX-Thread-Funktionen zur expliziten Sperrung von Clients
Die folgenden Funktionen sind identisch zu den entsprechenden Funktionen ohne „_unlocked“ im Namen:
Der Anwender muss hierbei selbst die Threadsicherheit garantieren, indem er die verwendeten Objekte des Typs (FILE*) durch den Aufruf der Funktionen flockfile bzw. ftrylockfile sperrt und durch Aufruf der Funktion funlockfile entsperrt.
POSIX-Thread-Funktionen mit Wirkung auf den Prozess oder auf einen Thread
Mit der Realisierung der POSIX-Threads ist zu unterscheiden zwischen
Funktionen, die sich (wie bisher) auf den Prozess und damit auf alle zum Prozess gehörenden Threads auswirken, und
Funktionen, die sich nur auf einen speziellen Thread beziehen
Bei Signalen ist ebenfalls zu unterscheiden, ob sie an den (gesamten) Prozess oder an einen bestimmten Thread geschickt werden.
Es handelt sich um folgende Funktionen::
„atexit - Prozessendefunktion registrieren“
„exit, _exit - Prozess beenden“
„fcntl - offene Datei steuern“
„fork - neuen Prozess erzeugen“
„getcontext, setcontext - Benutzerkontext anzeigen oder ändern“
„getpid - Prozessnummer ermitteln“
„getrlimit - Grenzwert für ein Betriebsmittel ermitteln“ im Abschnitt "getrlimit, setrlimit - Grenzwert für ein Betriebsmittel ermitteln bzw. setzen"
„getpriority - Prozesspriorität abrufen“ im Abschnitt "getpriority, setpriority - Prozesspriorität abrufen bzw. setzen"
„kill - Signal an Prozess oder Prozessgruppe senden“
„lockf - Dateiabschnitt sperren“
„msgrcv - Nachricht aus Warteschlange empfangen“
„msgsnd - Nachricht an Warteschlange senden“
„nice - Priorität eines Prozesses ändern“
„pause - Prozess bis zum Empfang eines Signals anhalten“
„raise - Signal an aufrufenden Prozess senden“
„read - Bytes aus Datei lesen“
„semop - Semaphor-Operationen durchführen“
„setcontext - Benutzerkontext ändern“
„setlocale - Lokalität ändern oder ermitteln“
„sigaction - Signalbehandlung ermitteln oder ändern“
„sigpause - Signal aus Signalmaske entfernen und Prozess deaktivieren“
„sigpending - blockierte Signale ermitteln“
„sigsetjmp - Marke für nichtlokalen Sprung durch Signal setzen“
„sigsuspend - auf Signal warten“
„sleep - Prozess für festgesetzte Zeitspanne anhalten“
„usleep - Prozess für festgesetzte Zeitspanne anhalten“
„wait, waitpid - auf Halt oder Ende eines Kindprozesses warten“
„wait3 - auf Zustandsänderung von Kindprozessen warten“
„waitid - auf Zustandsänderung von Kindprozessen warten“
„write - Bytes in Datei schreiben“
Bei folgenden Funktionen wird beim EPIPE
-Fehler das Signal SIGPIPE
nicht an den Prozess, sondern an den aufrufenden Thread gesendet:
„fclose - Datenstrom schließen“
„fputc - Byte in Datenstrom schreiben“
„fputwc - Langzeichen in Datenstrom schreiben“
„fseek - Lese-/Schreibzeiger im Datenstrom auf aktuellen Wert positionieren“
„write - Bytes in Datei schreiben“
Funktionen, die nicht threadsicher sind
Alle Funktionen, die in der C-Laufzeitbibliothek definiert sind, werden threadsicher ausgeliefert. Eine Ausnahme bilden lediglich die folgenden Funktionen:
„asctime - Datum und Uhrzeit in Zeichenkette umwandeln“ 1)
„basename - letztes Element eines Pfadnamens zurückgeben“
„brk, sbrk - Größe des Datensegments verändern“
„chroot - Root-Verzeichnis ändern“
„ctime, ctime64 - Datum und Uhrzeit in Zeichenkette umwandeln“ 1)
„cuserid - Benutzerkennung ermitteln“
„dbmclearerr - Funktion zur Verwaltung von dbm-Datenbasen“ im Abschnitt "dbm_clearerr, dbm_close, dbm_delete, dbm_error, dbm_fetch, dbm_firstkey, dbm_nextkey, dbm_open, dbm_store - Funktionen zur Verwaltung von dbm-Datenbasen"
„dirname - Vaterverzeichnis zu einem Pfadnamen liefern“
„ecvt, fcvt, gcvt - Gleitpunktzahl in Zeichenkette umwandeln“
„endgrent, getgrent, setgrent - Gruppenverwaltung“
„endpwent, getpwent, setpwent - Benutzerkatalog verwalten“
„endutxent, getutxent, getutxid, getutxline, pututxline, setutxent - utmpx-Einträge verwalten“
„fcvt - Gleitpunktzahl in Zeichenkette umwandeln“
„gamma - Logarithmus der Gamma-Funktion berechnen“
„gcvt - Gleitpunktzahl in Zeichenkette umwandeln“
„getdtablesize - Größe der Deskriptor-Tabelle abrufen“
„getenv - Wert einer Umgebungsvariablen ermitteln“
„getgrent - Gruppendatei-Eintrag bestimmen“
„getpwent - Benutzerdaten aus dem Benutzerkatalog lesen“
„getutxent, getutxid, getutxline - auf utmpx-Eintrag zugreifen“
„getgrgid - Gruppendateieintrag für Gruppennummer ermitteln“ 1)
„getgrnam - Gruppendateieintrag für Gruppenname ermitteln“ 1)
„getlogin - Benutzerkennung ermitteln“1
„getpagesize - aktuelle Seitengröße ausgeben“
„getpass - Zeichenkette ohne Echo lesen“
„getpwnam - Benutzername ermitteln“ 1)
„getw - Maschinenwort aus Datenstrom lesen“
„initstate - Pseudozufallszahl generieren“ im Abschnitt "initstate, random, setstate, srandom - Pseudozufallszahlen generieren" 2)
„localtime, localtime64 - Datum und Uhrzeit in Ortszeit umwandeln“ 1)
„longjmp - nichtlokalen Sprung ausführen“ 3)
„ptsname - Name eines Pseudoterminals“
„putenv - Umgebungsvariable ändern oder hinzufügen“
„pututxline - utmpx-Eintrag schreiben“
„putw - Maschinenwort in Datenstrom schreiben“
„rand - Pseudo-Zufallszahlen (int) generieren“ 2)
„random - Pseudo-Zufallszahlen erzeugen“ 2)
„readdir - aus Dateiverzeichnis lesen“ 3)
„sbrk - Größe des Datensegments verändern“
„setgrent - Schreib-/Lesezeiger auf den Anfang der Gruppendatei zurücksetzen“
„setpwent - Zeiger zum Durchsuchen des Benutzerkatalogs löschen“
„setutxent - Zeiger auf utmpx-Datei zurücksetzen“
„siglongjmp - nichtlokalen Sprung durch Signal ausführen“ 3)
„signgam - Variable für Vorzeichen von lgamma“
„sigprocmask - blockierte Signale ermitteln oder ändern“ 4)
„sigset - Signalbehandlung ändern“
„strtok - Zeichenkette in Tokens zerlegen“ 1)
„ttyname - Pfadnamen eines Terminals ermitteln“ 1)
„ttyslot - Eintrag des aktuellen Benutzers in der utmp-Datei finden“
„wait3 - auf Zustandsänderung von Kindprozessen warten“
Hinweis | Wenn Sie irgendeine der |
1) | reentrante Funktion (Extension „_r“) nutzen |
2) | reentrante Funktion |
3) | Das Ergebnis eines Aufrufs dieser Funktionen ist undefiniert, wenn die Struktur |
4) | Funktion |