FCNTL w Linux
W systemie operacyjnym Linux połączenie FCNTL odbywa się za pośrednictwem deskryptorów. Na przykład blokada odczytu jest umieszczana na czytelnym deskryptorze pliku, a podobny przypadek dotyczy blokady zapisu. Deskryptor pliku reprezentuje otwartą liczbę pliku. Program jest wygodny, aby pamiętać o tym, nad którym plik pracuje. Kiedy otwieramy plik, numer, który nie jest już przypisany i jest bezpłatny, jest podawany do pliku w tabeli deskryptora pliku procesów. Aw przypadku zamykania pliku, przypisany numer jest usuwany z tabeli deskryptora procesu.
Składnia
#włączaćNajpierw definiujemy bibliotekę FCNTL, aby proces był łatwy do osiągnięcia. Wywołanie funkcji zawiera głównie dwa argumenty w parametrze. Jednym z nich jest deskryptor, jak zdefiniowano powyżej; definiuje plik, w którym ma zastosować polecenie kontroli. Innymi słowy, na których atrybuty należy zmienić. Drugi to polecenie stosowane do określonych deskryptorów.
Jak FCNTL zmienia właściwości pliku
Funkcja FCNTL jest używana do pięciu różnych celów, w tym głównie powielanie, ustawienie flag itp.; Każdy z nich jest szczegółowo opisany.
Cmd = f_dupfd
Zduplikuj deskryptor plików. Nowa zduplikowana wartość jest zwracana do funkcji. Ta wartość jest najniższa, która nie jest już otwarta lub przydzielona żadnemu innym deskryptorowi. Jest zawsze traktowany jako liczba całkowita, a wartość jest zawsze większa niż trzeci argument. Ponadto zduplikowana wartość ma flagi deskryptora pliku. Nowy deskryptor ma ten sam wpis w tabeli, co oryginalny deskryptor.
Cmd = getfd
Ta funkcja ma specjalność do zwrócenia flag deskryptora jako wartości funkcji. Jak wskazuje nazwa, po ustawieniu otrzymujemy flagę.
Cmd = setfd
Podobnie jak zdobycie flagi, ta funkcja służy do ustawienia flagi deskryptora. Program ustawił flagę na 0, nie zamykaj EXEC lub na 1, aby zamknąć EXEC.
Cmd = f_getfl
Ta funkcja zwraca flagi statusu pliku jako wartości funkcji. Gdy status flagi jest opisany jako flaga otwarta, opisujemy flagi statusu.
Cmd = f_setfl
Ustawia flagę statusu na pliku. Ponieważ GETFL jest używany do zwrócenia statusu pliku.
Cmd = f_getown
Ta funkcja jest związana z tożsamością procesu, ponieważ zwraca identyfikator procesu i identyfikator grupy procesu.
Cmd = f_setown
Ta funkcja ma tendencję do tworzenia i ustawiania identyfikatora procesu lub identyfikatora procesu grupy.
Wartość zwracana z FCNTL zależy od użytego polecenia. Jeśli polecenia napotykają błąd, zwraca -1. Jeśli każda funkcja nie ulegnie żadnemu problemowi, to jakakolwiek inna wartość oprócz -1 jest zwracana. Podczas gdy w przypadku F_Getown zwrócone identyfikator może być wartością dodatnią lub wartością ujemną.
Teraz dodamy podstawowe przykłady tutaj. Aby zaimplementować kody FCNTL, musisz mieć edytor tekstu i terminal Linux, aby uzyskać wynikową wartość.
Przykład 1
Rozważ przykład, w którym stworzyliśmy, a następnie napisaliśmy nowy wiersz w przykładowym pliku tekstowym. Ten przykład nie wykorzysta zaangażowania FCNTL jako funkcji. Funkcje tej funkcji zostaną zaimplementowane w kodzie tylko za pomocą biblioteki.
#włączaćNapiszemy ciąg do kodu, więc musimy użyć biblioteki ciągów. Wzięliśmy tutaj szereg deskryptorów plików. Ponadto pobrano tablicę postaci, która jest bezpośrednio inicjowana przez ciąg niektórych znaków. Za pomocą deskryptora pliku użyjemy niektórych operacji pliku statusu flagi pliku, takich jak czytanie i pisanie w pliku itp. Jeśli plik jest już utworzony, musisz go otworzyć i napisać w nim ciąg.
FD [0] = otwarta (”próbka.txt ", o_rdwr);To oświadczenie otworzy plik o nazwie „próbka.txt 'za pomocą flagi O_RDWR. Teraz, aby dodać ciągu definiuje wcześniej, zostanie wprowadzony do pliku.
Write (FD [0], BF1, Strlen (BUF1));Za pośrednictwem opcji odczytu ciąg zostanie wyświetlony podczas wykonywania kodu z pliku. Oba deskryptory plików są zamknięte na końcu.
Po zapisaniu pliku użyjemy kompilatora GCC do wykonywania pliku.
plik pliku $ gcc -o.CPo wykonaniu kodu zobaczysz, że wyświetlany jest ciąg, który napisaliśmy w kodzie do pliku. To stwierdzenie zostało pobrane z pliku. Po przejściu do plików w Ubuntu zobaczysz próbkę.plik txt. Zauważysz, że ciąg jest zapisany w pliku za pośrednictwem kodu po otwarciu pliku.
Przykład 2
To jest przykład polecenia F_Getfl. Zwraca flagę statusu pliku jako wartość funkcji. Po pierwsze, plik zostanie otwarty; Jeśli nie został jeszcze utworzony, O_Creat utworzy plik; Po pierwsze, wszystkie te funkcje statusu flagi są podane poniżej, aby ułatwić zrozumienie.
O_RDONLY: Ta funkcja otwiera plik tylko do celu odczytu.
O_WRONLY: dotyczy tylko celu pisania.
O_RDWR: Jest to również proces czytania i pisania.
O_APPEND: Dodaje się do każdej funkcji pisania na bieżącym pliku.
Są to główna flaga używana w przykładzie. Wracając do przykładu, jeśli zwrócona wartość poprzez otwarcie pliku jest mniejsza niż 0, wówczas wyświetlany jest komunikat o błędzie.
Po otwarciu musisz uzyskać plik; Jeśli status pliku wynosi -1, wyświetlany jest komunikat o błędzie; W przeciwnym razie status pliku zostanie odebrany. Teraz za pomocą trybu dostępu otrzymamy flagę deskryptora pliku. Wszystkie opcje zostaną sprawdzone za pośrednictwem instrukcji IF-ELSE. Opcja zgodnie ze statusem pliku zostanie odpowiednio wybrana. W końcu, jeśli status deskryptora pliku jest większy niż 1, oznacza to, że plik jest teraz zamknięty.
Skompiluj kod; Zobaczysz, że wszystkie instrukcje są wyświetlane zgodnie ze statusem FD albo plik jest otwarty lub zamknięty.
Wniosek
Artykuł „C: Użycie funkcji FCNTL” zawiera cechy funkcji FCNTL. Deskryptor pliku odgrywa istotną rolę w procesie obsługi plików w odniesieniu do dowolnej funkcji. Użyliśmy również przykładów flagi, w przypadku czytania i pisania do pliku. Oba wyjaśnione tutaj przykłady będą dla Ciebie pomocne w wykorzystaniu FCNTL w języku programowania C.