Pisz funkcję w języku C

Pisz funkcję w języku C

Zarządzanie plikami w programowaniu jest zadaniem, w którym programista musi pływać. Znajomość różnych funkcji otwartych, odczytu i zapisu jest niezbędna, ponieważ zawsze potrzebujemy ich do przechowywania lub usuwania informacji przechowywanych w plikach.

W tym artykule z podpowiedzi Linux dowiesz się, jak korzystać z funkcji Write () do zapisywania plików.

Wyjaśnimy wszystko na temat tej elli, jej składni, metody połączenia, argumentów wejściowych i wyjściowych, rodzaju danych, które przyjmuje w każdym przypadku, oraz jak poprawnie zadeklarować.

Następnie stosujemy to, czego się nauczyliśmy, stosując użycie tej funkcji w praktyczne przykłady, które przygotowaliśmy dla Ciebie z fragmentami kodowymi i obrazami, pokazując użycie zapisu () w języku c.

Aby mieć kompleksową wiedzę na temat korzystania z funkcji Write (), dodaliśmy specjalną sekcję, która opisuje indywidualne błędy, które mogą wystąpić podczas korzystania z tej funkcji, a także ich wykrywania i identyfikacji, dzięki czemu masz niezbędne techniki szybkiego rozwiązania w przypadku ich wystąpienia.

Składnia funkcji write () w języku c

int write (int fd, void *buf, size_t n);

Opis funkcji Write () w języku C

Funkcja zapisu () zapisuje plik otwartego. Ta funkcja zapisuje zawartość bufora, na który wskazuje „BUF” na plik określony przez jego deskryptor w argumencie wejściowym „FD”. Rozmiar bloku, który ma być zapisany w pliku, musi być określony w argumencie wejściowym „N”.

Aby móc pisać z funkcją zapisu (), plik należy otworzyć za pomocą funkcji Open () i określony w atrybutach O_RDONLY lub O_RDWR. W przeciwnym razie ta funkcja nie ma wpływu.

Jeśli połączenie zakończy się powodzeniem, zwraca liczbę wprowadzonych znaków. Jeśli wystąpi błąd podczas pisania, zwraca wynik równy -1. Kod identyfikacyjny, który wskazuje błąd, można pobrać ze zmiennej globalnej Errno, która jest zdefiniowana w „Errno.H ”nagłówek.

Później znajdziesz sekcję, w której wyjaśniamy, jak wykryć i zidentyfikować najczęstsze błędy tej funkcji.

Funkcja zapisu () 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 () i Write (), musisz dołączyć te nagłówki w kodzie w następujący sposób:

#włączać
#włączać

Jak napisać do pliku za pomocą funkcji write () w języku c

W tym przykładzie piszemy pusty plik tekstowy o nazwie „Przykład.txt ”, który utworzyliśmy wcześniej w katalogu„ Dokumenty ”.

Pierwszym krokiem jest wstawienie niezbędnych nagłówków. Wewnątrz funkcji main () otwórz plik z funkcją Open (). Aby to zrobić, musimy zadeklarować liczbę całkowitą „FD”, która służy jako deskryptor pliku, oraz tablica bufora „BUF” 1024-znakowa, która zawiera tekst, który chcemy napisać do pliku. W tym buforze przechowujemy pierwszy akapit strony GCC Man, aby napisać go do „przykładu.plik txt ”.

Po otwarciu pliku z funkcją Open () w trybie odczytu/zapisu piszemy do pliku, wywołując funkcję zapisu () i przekazanie deskryptora pliku „FD” jako pierwszy argument wejściowy, wskaźnik „BUF” jako drugi argument i rozmiar łańcucha zawarty w tablicy jako trzeci argument, który otrzymujemy za pomocą funkcji strlen (). Oto kod tego przykładu:

#włączać
#włączać
#włączać
#włączać
#włączać
#włączać
#włączać
void main ()

int fd;
Char Buffer [1024] = "Gdy wywołujesz GCC, zwykle wykonuje to wstępne przetwarzanie, kompilację, montaż i łączenie. Ogólne opcje pozwalają zatrzymać ten proces na etapie pośrednie. Na przykład opcja -C mówi, że nie uruchamia linkera.Następnie wyjście składa się z plików obiektów wyjściowych przez asembler.";
fd = otwarte (”dokumenty/przykład.txt ", o_rdwr);
Write (FD i Buffer, Strlen (Buffer));
Zamknij (FD);

Na poniższym rysunku widzimy kompilację i wykonanie tego kodu wraz z otwartym plikami zapisanym przez funkcję zapisu ():

Jak dodać tekst na końcu pliku z funkcją zapisu () w języku c

Gdy plik zostanie otwarty, określając flagi O_WRONLY lub O_RDWR, kursor przeskakuje do pierwszej pozycji i zaczyna pisać stamtąd.

Aby dodać tekst na końcu pliku, musi być określony przez logiczną lub operację między flagami O_WRONLY lub O_RDWR i flagą O_ Dodatku w argumencie flag wejściowych funkcji Open (). W ten sposób kursor jest umieszczony na końcu pliku, a pisanie zaczyna się stamtąd. Również atrybuty i tryb zapisu można zmienić po otwarciu pliku za pomocą funkcji FCNTL ().

Na poniższej ilustracji możesz zobaczyć kod, który dodaje tekst na końcu pliku, który napisaliśmy w poprzednim przykładzie:

#włączać
#włączać
#włączać
#włączać
#włączać
#włączać
#włączać
void main ()

int fd;
Char Buffer [1024] = "Ten tekst jest dodawany. Ten tekst jest dodawany.";
fd = otwarte (”dokumenty/przykład.txt ", o_rdwr | O_Append);
Write (FD i Buffer, Strlen (Buffer));
Zamknij (FD);

Poniższy obraz pokazuje dodany tekst. Jak widać, dzięki tej metodzie otwierającej funkcja zapisu () zaczyna pisać w pozycji ostatniej postaci zapisanej w pliku:

Jak wykryć i zidentyfikować błędy, które mogą wystąpić podczas korzystania z funkcji zapisu () w języku c

Używanie write () może generować różne błędy. Kiedy tak się dzieje, funkcja ta 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ą zwrotną -1. Zobaczmy teraz, w jaki sposób możesz użyć tej metody, aby ustalić, czy wystąpił błąd:

int n;
n = Write (FD i Bufor, Strlen (Buffer));
if (n == -1)
printf („Wystąpił błąd podczas próby napisania pliku.");

Jeśli funkcja zapisu () powraca z błędem, przechodzi do instrukcji „If” i drukuje komunikat, „”Wystąpił błąd podczas próby napisania pliku".

Gdy wystąpi błąd, kod numeryczny jest automatycznie przechowywany w zmiennej globalnej Errno, która jest zdefiniowana w „Errno.H ”nagłówek. Ten kod można użyć do identyfikacji wystąpienia błędu.

Poniżej znajduje się fragment błędów, które może wygenerować funkcja zapisu () i które są zdefiniowane w „Errno.Nagłówek H, wraz z krótkim opisem każdego błędu i powiązanej wartości całkowitej:

Definicja Wartość w Errno Błąd
Eagain 11 Spróbuj ponownie.
Ebadf 9 Niepoprawny numer pliku.
EDESTADDRREQ 89 Wymagany adres docelowy.
Edquot 122 Przekroczony kwota.
Efault 14 zły adres.
Efbig 27 Plik zbyt duży.
Eintr 4 Przerwane połączenie systemowe.
Einval 22 Błędny argument.
EIO 5 Błąd we/wy.
Enospc 28 Brak miejsca w urządzeniu.
Eperm 1 Operacja niedozwolona.

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 spójrzmy na przykład, w którym staramy się wprowadzić deskryptor ze znakiem ujemnym, co powoduje błąd. Aby zidentyfikować 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 ta funkcja może wywołać.

#włączać
#włączać
#włączać
#włączać
#włączać
#włączać
#włączać
void main ()

int fd;
int n;
Char Buffer [1024] = „Hello World”;
fd = otwarte (”dokumenty/przykład.txt ", o_rdwr);
n = zapisz (-2 i bufor, strlen (bufor));
if (n == -1)
przełącznik (errno)
Case ebadf:
printf („zły numer pliku. Błąd: %i \ n ”, errno);
przerwa;
Case einval:
printf („Nieprawidłowy argument. Błąd: %i \ n ”, errno);
przerwa;
Case EIO:
printf („Błąd we/wy . Błąd: %i \ n ”, errno);
przerwa;


Jak widać na poniższym rysunku, funkcja zapisu () zwraca błąd, gdy nieprawidłowy deskryptor jest przekazywany jako argument wejściowy. Wartość pobierana ze zmiennej Errno jest używana jako warunek skoku, który pozwala nam zidentyfikować błąd, gdy wprowadzamy przypadek EBADF.

Wniosek

W tym artykule z podpowiedzi Linux pokazaliśmy, jak korzystać z funkcji Write () do pisania do plików. Pokazaliśmy ci składnię i teoretyczny opis tej funkcji. Wyjaśniliśmy również metody wykrywania błędów i identyfikacji, aby mieć niezbędne narzędzia i techniki, aby szybko rozwiązać te problemy.

Aby pomóc Ci zobaczyć, jak działa zapis (), zaimplementowaliśmy użycie tej funkcji w praktycznych przykładach z kodami i obrazami, które pokazują użycie tego i innych funkcji przetwarzania plików.

Pokazaliśmy również, jak wybrać tryb otwartego pliku, aby wstawić tekst na początku lub na końcu pliku, i jakie funkcje są dostępne do zmiany tych atrybutów.