Znajomość funkcji otwartych, odczytu i zapisu jest niezbędna, ponieważ zawsze potrzebujemy ich do przechowywania lub usuwania informacji przechowywanych w plikach. Język C zawiera dwie podstawowe funkcje, których można użyć do otwarcia plików za pomocą funkcji Open () i Fopen (), każda z różnymi metodami wywoływania.
W tym artykule z podpowiedzi Linux dowiesz się, jak korzystać z funkcji Open (). Wyjaśnimy wszystko na temat tej funkcji, jej składni, wywołania metody, argumentów wejściowych i wyjściowych, rodzaju danych, które przyjmuje w każdym przypadku, oraz jak poprawnie zadeklarować.
Następnie zastosujemy to, czego się nauczyliśmy, wdrażając użycie tej funkcji w praktycznych przykładach, które przygotowaliśmy dla Ciebie z fragmentami kodowymi i obrazami pokazującymi użycie funkcji Open () w języku C.
Aby mieć kompleksową wiedzę, dodajemy specjalną sekcję, która opisuje wszystkie błędy, które mogą wystąpić podczas korzystania z tej funkcji, a także ich wykrywanie i identyfikację, aby w przypadku ich wystąpienia masz niezbędne techniki dla a Szybkie rozwiązanie.
Składnia funkcji Open () w języku C
int Open (const char *pathName, int flags);Opis funkcji Open () w języku C
Funkcja Open () otwiera plik do odczytu lub pisania. Ta funkcja otwiera plik określony w argumencie wejściowej ścieżki. To wejście musi określić ścieżkę bezwzględną lub względną oraz nazwę pliku w formacie ciągu lub wskaźnika.
Argument wejściowy flag określa atrybuty, które plik musi mieć. Poniżej znajduje się lista flag, które akceptuje ten argument wejściowy, oraz krótki opis atrybutu, który każdy ustawia:
Flaga | Opis |
O_rdonly | Otwórz tylko do odczytu. |
O_wronly | Otwórz tylko do pisania. |
O_RDWR | Otwórz plik do czytania i pisania. |
O_Creat | Tworzy plik na ścieżce i nazwie określonej w nazwa ścieżki argument. |
O_ Dodatek | Otwiera plik i umieszcza kursor na końcu zawartości. |
O_ASYNC | Włącz kontrolę wejściową i wyjściową przez sygnał. |
O_CLOEXEC | Włącz tryb zamykania w pliku otwartym. |
O_nonblock | Wyłącza blokowanie otwartego pliku. |
O_TMPFILE | Utwórz nienazwany plik tymczasowy na określonej ścieżce. |
W przypadkach, w których używa się więcej niż jednej flagi, należy między nimi wykonywać logiczną operację „lub”. Można to zrobić w ramach flag argumentów wejściowych w tym samym wierszu kodu, co wywołanie funkcji.
Atrybuty i tryby można zmienić lub konsultować po otwarciu pliku za pomocą funkcji FCNTL ().
Funkcja Open () zwraca liczbę całkowitą zawierającą deskryptor otwartego pliku. Ten deskryptor jest używany jako argument wejściowy dla funkcji przetwarzania plików, takich jak read (), zapis () itp., Aby odwołać się do pliku.
Ta funkcja jest zdefiniowana w „unistd.H ”nagłówek. Flagi, które definiują atrybuty i tryb do otwarcia pliku, są zdefiniowane w „FCNTL.H". Aby użyć funkcji Open (), musisz podać te nagłówki w swoim kodzie w następujący sposób:
#włączaćJak otworzyć plik za pomocą funkcji Open () w języku C
W tym przykładzie użyjemy funkcji Open (), aby otworzyć plik w trybie odczytu i zapisu. W takim przypadku jest to wcześniej utworzony plik wywołany "przykład.tekst" który jest przechowywany w „Dokumenty”.
Krok 1: Pierwszym krokiem jest włączenie wymaganych nagłówków i oświadczenie, że wychodzi z pustego i powraca w funkcji Main ().
Krok 2: Następnym krokiem jest zadeklarowanie zmiennych, które służą jako argumenty wejściowe i wyjściowe do funkcji Open (). Jako argument wyjściowy deklarujemy liczbę całkowitą „FD”, która jest deskryptorem pliku. Jako argument wejściowy deklarujemy tablicę znaków bufora, która zawiera ciąg z ścieżką i nazwą pliku do otwarcia.
Zgłaszamy również szereg 512 znaków o nazwie „tekst”, w którym przechowujemy tekst, który chcemy napisać do pliku, który w tym przypadku jest pierwszym akapitem tego artykułu.
Krok 3: Po ogłoszeniu zmiennych wywołujemy funkcję Open () i przekazujemy liczbę całkowitą „FD” jako argument wyjściowy, ścieżkę ciągów jako pierwszy argument wejściowy i flaga O_Wronly jako drugi argument.
Krok 4: Gdy otwarte () zwraca z wywołania, zwraca deskryptor pliku, który jest otwarty w „FD”. Następnie piszemy z funkcją zapisu (), przekazując deskryptor „FD” jako pierwszy argument wejściowy, tekst ciągu jako drugi argument wejściowy, a na koniec rozmiar tekstu, który jest uzyskiwany za pomocą funkcji strlen (). Po operacji zapisu zamykamy plik za pomocą funkcji Close ().
Oto pełny kod tego przykładu:
//Krok 1Poniższy rysunek pokazuje kompilację i wykonywanie tego kodu wraz z plikiem, który właśnie napisaliśmy. Jak widzimy, funkcja Open () otwiera plik poprawnie. Następnie używamy funkcji Write () do napisania zawartości tekstu. W takim przypadku zawiera pierwszy akapit tego artykułu:
Błędy, które mogą wystąpić podczas korzystania z funkcji Open (): Jak je wykryć i identyfikować
Korzystanie z funkcji Open () może prowadzić do różnych błędów. Jeśli tak jest, zwraca wynik równy -1.
Najłatwiejszym sposobem ustalenia, czy wystąpił błąd, jest użycie warunku „jeśli”, w którym warunek jest wartością -1, która jest zwracana w „FD”. Spójrzmy teraz, w jaki sposób możesz użyć tej metody, aby ustalić, czy wystąpił błąd:
fd = Open („ścieżka/nazwa pliku”, flagi);Jeśli funkcja Open () powraca z błędem, przechodzi do instrukcji „If” i drukuje wiadomość, „Wystąpił błąd podczas próby otwarcia pliku".
Gdy Open () zwraca wynik równy -1, automatycznie przechowuje kod numeryczny w zmiennej globalnej Errno, która jest zdefiniowana w „Errno.H ”nagłówek. Ten kod numeryczny można użyć do identyfikacji wystąpienia błędu.
Poniżej znajduje się fragment błędów, które może wygenerować funkcja Open (), wraz z krótkim opisem każdego błędu i powiązanej wartości całkowitej:
Definicja | Wartość w Errno | Błąd |
Eperm | 1 | operacja niedozwolona |
Enoent | 2 | Brak takiego pliku lub katalogu |
Eintr | 4 | Przerwane połączenie systemowe |
Enxio | 6 | Brak takiego urządzenia ani adresu |
Enomem | 12 | Brak pamięci |
EACCES | 13 | Zezwolenie odrzucone |
Efault | 14 | Zły adres |
Ebusy | 16 | Urządzenie lub zasób zajęty |
Eexist | 17 | plik istnieje |
Enodev | 19 | Nie ma takiego urządzenia |
Enotdir | 20 | Nie katalog |
Eisdir | 21 | Jest katalogiem |
Einval | 22 | Błędny argument |
Efile | 23 | Przepełnienie tabeli plików |
Emfile | 24 | Zbyt wiele otwartych plików |
Etxtbsy | 26 | Plik tekstowy zajęty |
Enospc | 28 | Brak miejsca w urządzeniu |
Erofs | 30 | System plików tylko do odczytu |
Enametoolong | 36 | Nazwa pliku zbyt długo |
Elop | 40 | Zbyt wiele symbolicznych linków napotkanych |
Eoverflow | 75 | Wartość zbyt duża dla zdefiniowanego typu danych |
Edquot | 122 | Mozliwa ilość przekroczona |
Najłatwiejszym sposobem zidentyfikowania błędu jest otwarcie przełącznika, w którym zmienna errno jest warunek skoku, a każdy przypadek jest definicją błędu.
Następnie rozważ przykład, w którym otwieramy plik, który nie istnieje, co powoduje błąd. Aby wykryć błąd, używamy warunku „jeśli”, który widzieliśmy w poprzednim fragmencie. Aby go zidentyfikować, otwieramy przełącznik z trzema najczęstszymi błędami, które może wytworzyć ta funkcja:
#włączaćPoniższy obraz pokazuje kompilację i wykonanie tego kodu. W nim widzimy, w jaki sposób wygenerowany błąd jest wykrywany w stanie „jeśli” i w jaki sposób błędy są identyfikowane w przełączniku warunkowym, aby wyświetlić komunikat i określoną wartość:
Wniosek
W tym artykule z podpowiedzi Linux wyjaśniliśmy, jak używać funkcji Open () do otwarcia plików.
Pokazaliśmy wam składnię tej funkcji i teoretyczny opis tego, jak ona działa, metoda połączenia, argumenty wejściowe i typ danych, który jest używany w każdym przypadku.
Następnie zaimplementowaliśmy użycie funkcji Open () w praktycznym przykładzie przy użyciu fragmentów kodu i obrazów. Pokazaliśmy, jak zadeklarować wymagane zmienne, wywołać tę funkcję, aby otworzyć plik i napisać do niej.
Dołączyliśmy również sekcję, w której wymieniamy wszystkie błędy, które może wygenerować ta funkcja. Pokazaliśmy ci techniki ich wykrycia i sklasyfikowania, abyś miał niezbędne środki do szybkiego naprawy, gdy wystąpią.