GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Prüfen, ob errno !=EINTR:was bedeutet das?

Viele Systemaufrufe melden den EINTR Fehlercode, wenn während des Systemaufrufs ein Signal aufgetreten ist. Tatsächlich ist kein Fehler aufgetreten, er wird nur so gemeldet, weil das System den Systemaufruf nicht automatisch fortsetzen kann. Dieses Codierungsmuster wiederholt einfach den Systemaufruf, wenn dies passiert, um den Interrupt zu ignorieren.

Dies kann beispielsweise passieren, wenn das Programm alarm() verwendet Code asynchron auszuführen, wenn ein Timer abgelaufen ist. Wenn die Zeitüberschreitung auftritt, während das Programm write() aufruft , wir wollen nur den Systemaufruf wiederholen (auch bekannt als Lesen/Schreiben usw.).


Die Antworten hier sind wirklich gut und ich möchte einige interne Details hinzufügen:

Durch Signale unterbrochene Systemaufrufe können entweder abbrechen und EINTR zurückgeben oder sich automatisch neu starten, wenn und nur wenn SA_RESTART wird in sigaction(2) angegeben

und derjenige, der für diese Aufgabe verantwortlich ist, ist restart_block das verwendet wurde, um Informationen und Argumente für den Neustart von Systemaufrufen zu verfolgen


Von der Manpage auf write :

Der Anruf wurde durch ein Signal unterbrochen, bevor Daten geschrieben wurden


Linux
  1. Was bedeutet „:-“ in einem Shell-Skript?

  2. Was bedeutet diese Warnung?

  3. Was macht der Systemaufruf brk()?

  4. Was bedeutet rc in Punktdateien

  5. Was bedeutet #define X X?

Was bedeutet chmod 777

Was bedeutet „–“ (Doppelstrich)?

Was bedeutet es, „sh-kompatibel“ zu sein?

Keine X11-DISPLAY-Variable - was bedeutet das?

Was bedeutet die ep-Fähigkeit?

Was bedeutet %st oben?