C FCNTL Użycie funkcji

C FCNTL Użycie funkcji
Jak nazwa wskazuje, że FCNTL jest skrócona jako kontrola „pliku”. Oznacza to, że opiera się na procesie obsługi plików. FCNTL to połączenie systemowe. Umożliwia programowi umieszczenie odczytu lub zamka zapisu. Ta funkcja może być używana do zmiany właściwości pliku, które są już otwarte, albo można ją otworzyć poprzez dowolne zastosowane do niej działanie. Jest to funkcja wszechstronna i służy do modyfikowania plików na wiele sposobów, takich jak otwieranie, odczyt i zapis itp. Ten artykuł dotyczy funkcji sterowania w plikach.

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ć
int fcntl (deskryptor liczby całkowitych, cmd liczb całkowitych)

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.C
$ ./plik

Po 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.