C SigProcmask -Funktionsnutzung

C SigProcmask -Funktionsnutzung
Möglicherweise haben Sie von Socket -Programmierungen in C gehört. Eine der Socket -Funktionen ist die Funktion „SigProcmask“. Diese Funktion wurde normalerweise im Code verwendet, um die Signalmaske der Aufruffunktion zu inspizieren oder zu ändern. Die Signalmaske ist ein Begriff, der für eine Gruppe von Signalen verwendet wird, die derzeit blockiert sind und nicht für die Aufruffunktion vermittelt werden können. Diese Art von Signal ist als „blockierte Signale“ bekannt.Sie können sagen, dass ein Prozess immer noch die blockierten Signale empfangen kann, aber er wird erst verwendet, wenn er nicht blockiert und freigelassen wird, ich.e., erzogen. Bis dahin wird es anhängig sein. Daher werden wir innerhalb des heutigen Leitfadens die Verwendung der SigProcmask -Funktion in der C -Programmierung diskutieren. Lassen Sie uns einen Start haben.

Nach dem Ubuntu 20.04 erfolgreiches Login, Sie müssen die Hülle des Ubuntu 20 starten.04 System zuerst nach der Anmeldung. Probieren Sie also die Verknüpfung „Strg+Alt+T“ einfach auf dem Desktop -Bildschirm aus. Es wird die Terminal Shell für Sie in einigen Sekunden starten. Stellen Sie sicher, dass Sie Ihr System über das APT -Paket Ihres Systems aktualisieren. Danach müssen Sie die Anweisung "Touch" zusammen mit dem Dateinamen ausführen, den Sie generieren möchten, ich.e., So erstellen Sie die C -Datei über die Shell. Diese neu erstellte Datei finden Sie im Ordner „Home“ des Datei -Explorers Ihres Systems. Sie können versuchen, es mit dem Editor "Text" zu öffnen, um Code darin zu erstellen. Eine andere Möglichkeit, es in der Shell zu öffnen.

Beispiel 01:

Wir haben unseren Code im Redakteur „Nano“ gestartet, indem wir einige notwendige C -Header aufgenommen haben. Diese Header sind möglicherweise die häufigsten Header wie „Stdio.H ”,„ Unistd.H ”und„ stdlib.H". Davon abgesehen die wichtigste Header -Datei “Signal.H ”wurde hinzugefügt, um die Signalhandhabungsfunktionen im C -Code zu verwenden. Alle Arbeiten wurden in der Hauptmethode dieses Programms durchgeführt. Nach dem Start der Methode haben wir also einige Signalkonstruktvariablen mit dem Objekt "sigset_t" initialisiert, i.e., S, OS und PS. Das "S" steht für Signal, "OS" steht für einen ursprünglichen Signalsatz und der "PS" steht für einen anstehenden Signalsatz.

Das "SigEmptySet" hat das Konstrukt "S" verwendet, um eine Signalmaske zu initialisieren oder zu deklarieren und alle Signale zu ignorieren. Danach wurde die Funktion „Sigaddset“ verwendet. Die SIGINT -Signal -Handler -Routine bezieht sich auf das „Strg+C“, i.e., unterrupt Charakter. Es wird die Ausführung des aktuellen Prozesses stoppen und zur Hauptschleife zurückkehren.

Jetzt kommt die SigProcmask -Funktion hier mit drei Parametern. Der Parameter von SIG_Block zeigt, dass alle in einem Signalsatz gefundenen Signale „S“ zum aktuellen Signalsatz hinzugefügt werden. Das & S zeigt den Zeiger auf einen bestimmten Signalsatz an, der verwendet wurde, um die Signalmaske gemäß dem Konstrukt „SIGINT“ zu ändern. Der Parameter „OS“ weist auf den Signalsatz hin, der die Signalmaske für eine bestimmte Methode speichert. Die printf -Anweisung ist hier, um die alte Signalmaske des Signalsatzes anzuzeigen. Die Funktion „Sigpending“ ist hier, um Daten zu den Signalen innerhalb des anstehenden Signalsatzes zu speichern. Die printf -Anweisung wird hier wieder hier angezeigt. Die „Kill“ -Methode kam hierher, um den aktuellen Prozess mithilfe der Prozess -ID über die Funktion „getPid ()“ zu töten. Die Sigpending -Funktion wird erneut aufgerufen, um die ausstehenden Signale in den Satz zu erhalten, und in der Printf -Anweisung werden diese angezeigt. Die SigProcmask -Funktion verwendet den vordefinierten "sig_unblock" -Set, um weiter zu blockieren und die Funktion in der ausstehenden Liste zu erhöhen. Der Signalsatz „S“ wird mit Hilfe der Signalmaske „OS“ freigegeben.”

Kompilieren Sie Ihre C-Codedatei mit der Anweisung mit dem 2-Abstand in der Shell.

Ihre Datei wurde ausgeführt. Es zeigt Ihnen das alte Signal, das auf der Shell festgelegt ist, „OS."Aber wie die Signale von Set" S "jetzt blockiert sind, werden wir sehen. Wir können den Prozess nicht töten, da die Verarbeitung von Signalen blockiert ist. Endlich haben wir die Signale veröffentlicht.

Beispiel 02:

Schauen wir uns ein weiteres Beispiel für die Funktion „SigProcmask“ an, um den spezifischen Signalsatz zu blockieren und zu entsperren. Wir haben also eine neue Datei hinzugefügt und einen neuen Code ausprobiert. Zuerst müssen Sie dieselben Header -Dateien in die Codedatei hinzufügen, wie unten gezeigt. Die benutzerdefinierte Funktion „Catcher“ ist hier, um einfach anzuzeigen, dass wir uns in dieser Funktion unter Verwendung der Printf-Funktion befinden.

Die Hauptausführung beginnt mit der Main () -Funktion unseres Code. Es enthält zwei Argumente. Zunächst haben wir Zeitkonstrukte "S" für Start und "F" für das Finish über das Schlüsselwort 'time_t "verwendet. Die Struktur -Sigaktion wird als „Sact“ deklariert, um die Natur für ein Signal für etwas festzulegen. Das Konstrukt "sigset_t" wird verwendet, um zwei Signalsätze zu deklarieren, i.e., "NS" für ein neues Set und "Betriebssystem" für alte Sets. Die Variable "DIF" doppeltyp wird deklariert. Zunächst wird die SigEmptySet -Funktion verwendet, um die Signalmaske für die Sact -Struktur zu initialisieren und alle Signale auszuschließen. Der SA_FLAGS -Handler wurde für Bitmaske der Sigaktion verwendet und auf Null initialisiert. Das "SA_Handler" wurde verwendet, um die Funktion "Catcher" als Signalhandler mit dem Saction -Sigaktionsobjekt "Sact" zu deklarieren. Die Sigaktionsfunktion wird hier mit dem SigalRM aufgerufen, um den Alarm für das Signal „Sact“ hier einzustellen.

Das "SigEmptySet" wurde im Signal "NS" verwendet, um eine Signalmaske zu initialisieren und alle Signale auszuschließen. Die Sigaddset -Funktion fügt das SigalRM zum Signalsatz „NS“ hinzu. Der SigProcmask fügt den aktuellen Signalsatz die Signale „NS“ hinzu. Der Signalsatz „OS“ repräsentiert die Signalmaske für einen bestimmten Prozess. Die Startzeit wurde unter Verwendung der Funktion „CTime ()“ in printf festgestellt und ausgedruckt. Der Alarm für 1 Sekunde wird initialisiert und die Endzeit wurde festgestellt. Der Unterschied zwischen Finish- und Startzeiten wurde unter Verwendung der Funktion „Differim“ berechnet. Wenn die Differenz weniger als 10 Sekunden beträgt, verwendet die SigProcmask -Funktion das Signal „OS“, um die vorliegende Signalmaske für einen bestimmten Prozess mit SIG_SETMASK zu ersetzen. Die letzte Printf -Anweisung ist hier, um die Zeit anzuzeigen, in der ein Signalsatz für Alarme freigegeben wird.

Nach dem Kompilieren und Ausführen der Datei werden uns die Zeit angezeigt, in der das Alarmsignal festgelegt wird. Nach einigen Sekunden wird die Fängerfunktion aufgerufen, und eine andere Anweisung zeigt die aufgelöste Alarmsignalzeit für die Entlassung.

Abschluss:

Dieser Artikel zeigt die Erklärung zur Verwendung von SigProcmask -Funktionen in der C -Sprache. Wir haben zwei kurze und unkomplizierte Beispiele erörtert, um die Arbeit der SigProcmask -Funktion zusammen mit anderen Signalfunktionen zu veranschaulichen. Wir hoffen, dass dieser Artikel ein Bonus für jeden Benutzer ist, der neu in Signalen ist.