Funkcja sem_open 3 c

Funkcja sem_open 3 c
Określony semafor i wątek są powiązane metodą SEM_OPEN (). IP dostarczany przez argument do SEM_OPEN () może być wykorzystany przez metodologię w odniesieniu do semaforu, ponieważ po ustaleniu połączenia wartość semaforu jest wskazana przez parametr nazwy. Tutaj omówimy pokrycie funkcji SEM_OPEN z implementacją Ubuntu.

Składnia funkcji SEM_OPEN 3 C

# sem_open (const char *nazwa, int oflag, bez znaku długi tryb, niepodpisana wartość int);

Opis funkcji sem_open ()

Połącz się między zdefiniowanym semaforem a ramą za pomocą metody sem_open (). Lokalizacja jest uzyskiwana przy użyciu funkcji sem_open () wraz z terminem semaforowym, który umożliwia systemowi odwołanie się do semaforu odpowiadającego określonej etykiecie. Dopóki semafor nie zostanie pomyślnie zakończony przez funkcję SEM Close () lub dowolne inne metody EXEC, nadal może być używana przez funkcję. Funkcja operacji do sem_open () określa, czy semafor jest generowany lub dostępny tylko w zależności od parametru OFLAG. Elementy flagowe wymienione w następujący sposób można skonfigurować w parametrze OFLAG:

Flaga O_Creat:

Gdyby semafor nie był jeszcze obecny, ustalono go za pomocą tej flagi. O_Creat nie ma wpływu, jeśli semafor jest obecny i określony, z wyjątkiem tego, co wspomniano w O_Excl. Zamiast tego powstaje oznaczony semafor, jeśli używamy funkcji sem_open (). Parametry trzecie i czwartej dla atrybutu O_Creat to tryby trybu formatu t, jego zawartość i typ danych bez podpisu.

Przybliżona wartość danych służy do konstruowania semafora. Semafory muszą mieć początkowe wartości, które są większe lub równoważne z wartością SEM Max. Wydajny identyfikator użytkownika programu jest przypisany jako unikalny identyfikator Semaphore. Albo komputerowy identyfikator standardowy lub wydajny identyfikator grupy Framework jest dostarczany jako identyfikator grupy Semaphore.

Oprócz skonfigurowanych w masce inicjalizacji formatu pliku systemu, bajty autoryzacji semaforu są przypisane do wartości trybu argumentu. Wpływ jest niejednoznaczny za każdym razem, gdy podawane są elementy w trybie zamiast flagi dostępu do pliku. Inne metodologie mogą połączyć się z semaforem, wywołując funkcję sem_open () o podobnej wartości tytułu. Następnie semafor nazywany jest funkcja sem_open (), w tym flaga O_Creat.

Flaga O_Excl:

Jeśli tytuł Semaphore już istnieje, SEM_OPEN () odmawia, jeśli określono O_EXCL i O_Creat. Pod względem innych metod wywołujących funkcję sem_open () z zdefiniowaną zarówno O_Excl, jak i O_Creat, weryfikacja, aby sprawdzić, czy semafor już występuje, a tworzenie semaforu, gdy nie jest obecna lub oba są asynchroniczne.

Wynik jest nieokreślony, gdy określono O_EXCL i O_Creat. Wpływ jest niezdefiniowany, jeśli zmienna OFLAG zawiera flagi oprócz O_Creat i O_Excl. String określający element Semaphore jest źródłem parametru nazwy. Jeśli wartość znajduje się w plikach systemowych i jest dostępna do metod wykorzystujących nazwy ścieżki jako parametry, parametr nazwy spełnia wymagania dotyczące utworzenia nazwy ścieżki. Początkowy element w nazwie to cięcie (/) i żadne inne elementy w nazwie nie mogą zawierać cięć.

Ta sama lokalizacja semafora jest dostarczana dla każdego kolejnego dostępu do funkcji sem_open (), którą metoda sprawia, że ​​posiadanie podobnej wartości nazwy, pod warunkiem, że dla takiego semafora nie przedstawiono żadnych argumentów do funkcji sem_unlink (). Linki do semaforowych duplikatów generują niespójne wyniki. Niezidentyfikowane semafory są stosowane za pomocą metody sem_init ().

Wartość zwracana

Funkcja zwraca lokalizację semafora po pomyślnym wykonaniu. Jeśli nie, należy to przypisać Errno w celu zidentyfikowania błędu i wygenerowania wyników SEM nie powiodło się. Nagłówek zawiera opis terminu nie powiodło się. Jeśli sem_open () nie powiedzie się, zawsze zapewnia wartość w postaci SEM nie powiodła się.

Przykład funkcji sem_open 3 c w Ubuntu

Zobaczmy, jak działa funkcja sem_open () w Ubuntu. Na początku programu importowane są różne biblioteki. Te moduły są odpowiedzialne za obsługę różnych funkcji. Następnie definiujemy rozmiar bufora i ustawiamy go na 10. Zainicjujemy bufor zmienny i deklarujemy różne inne zmienne. W następnym kroku inicjujemy zmienną licznika wraz z tymi dwoma określonymi konstruktorami. Zastosujemy pętlę i definiujemy stan. Korzystamy również z pętli When.

Sprawdzamy, czy wartość zmiennej licznika jest równa rozmiarowi bufora za pomocą pętli while. Ale jeśli wartość licznika jest mniejsza niż wielkość bufora, nastąpi przyrost wartości licznika. Ponadto używamy funkcji sleep (), aby przez jakiś czas przechowywać wyjście.

Korzystamy z pustki konstruktor konsumenta. W ramach tego stosujemy konstruktor zmiennej „var”. Zainicjujemy zmienną „pozycję”. Następnie używamy pętli. Następnie używamy oświadczenia IF, aby potwierdzić, czy wartość licznika jest większa niż 0, czy nie. Jeśli wartość zmiennej licznika jest większa niż 0, następuje zmniejszenie wartości licznika.


W tej fazie kodu deklarujemy różne zmienne. Teraz deklarujemy konstruktora. Nazywamy metodę sem_open (). Zawiera cztery różne parametry. Aby zakończyć program, stosujemy funkcję pthread_exit ().

Otrzymujemy ten następujący rodzaj wyjścia po uruchomieniu kodu ogólnego:

Wniosek

W tym artykule redakcyjnym rozmawialiśmy o użyciu funkcji SEM_OPEN 3 C w Ubuntu. Najpierw widzieliśmy składnię tej funkcji. Następnie opisaliśmy niektóre cechy tej funkcji. Po tym wszystkim wykonaliśmy program w Ubuntu, który ma funkcję sem_open ().