Jak korzystać z wywołania systemowego zapisu w C

How Use Write System Call C



Wywołanie systemowe służy jako podstawowa brama między programami a jądrem systemu operacyjnego Linux. Chociaż prawie na pewno będziesz potrzebował wywołania systemowego przez całą swoją karierę programisty C, niezależnie od tego, czy dążysz do wyjątkowej produktywności, czy określonego stylu funkcji, repozytorium Glibc lub inne standardowe biblioteki znalezione w popularnych dystrybucjach Linuksa wystarczą dla ogromnej większości twoich wymagania. W tym przewodniku ustalimy koncepcję dotyczącą wywołania Write System w języku C.

Składnia:

#włączać

rozmiar_tpisać(int fd, const void*buf, liczba_rozmiarów);

W powyższej składni pierwsza linia pokazuje bibliotekę dla wywołań systemowych. W drugim wierszu fd oznacza deskryptor pliku, który w rzeczywistości jest liczbą określającą otwarty plik procesu. Słowo kluczowe *buf oznacza bufor. Zawiera w sobie wszelkie dane. Dalej jest liczenie. Jest to liczba bajtów do zapisania do deskryptora pliku z bufora.







Wymagania wstępne instalacji:

Aby uruchomić dowolny kod języka C, musisz najpierw zainstalować pakiety w dystrybucji Linuksa. Jeśli chcesz zobaczyć dalsze informacje dotyczące wywołania systemowego write, musisz w tym celu zainstalować pakiet manpages-dev. Aby otworzyć terminal za pomocą klawisza skrótu Ctrl + Alt + T. Po otwarciu napisz poniższe polecenie apt install, a następnie słowo kluczowe manpages-dev, aby zainstalować strony man.



$sudotrafnyzainstalowaćmanpages-dev



Instalacja stron podręcznika zajmie trochę czasu. Poczekaj, aż się zakończy.





Po instalacji możesz zobaczyć dodatkowe informacje o wywołaniu systemowym write za pomocą poniższego polecenia man w powłoce.



$facet 2 pisać

Wyjściowa strona podręcznika dla polecenia zapisu jest podana poniżej. Możesz przeczytać informacje na ten temat. Naciśnij q, aby wyjść z instrukcji.

Teraz nadszedł czas, aby zainstalować pakiet Gcc w systemie Linux, aby działał w języku C. W tym celu otwórz powłokę i napisz poniższe polecenie apt install, a następnie słowo kluczowe gcc.

$sudotrafnyzainstalować gcc

W międzyczasie podczas instalacji może poprosić o potwierdzenie tej czynności instalacji, naciskając y, aby kontynuować, i n, aby ją zatrzymać. Więc naciśnij klawisz y i naciśnij klawisz Enter.

Zostanie zainstalowany w twoim systemie w ciągu kilku minut, a ostatnie wiersze danych wyjściowych będą takie, jak pokazano na poniższym zrzucie.

Przykłady:

Oto kilka przykładów wywołania systemowego write w naszej dystrybucji Linuksa. Dlatego otwórz powłokę wiersza poleceń i utwórz w niej nowy plik C z rozszerzeniem kropka c. Musisz użyć poniższego polecenia nano, aby szybko je utworzyć i otworzyć. Nadaliśmy mu nazwę jako nowy.c.

$nanonowy.c

Otworzy się poniższe okno. Teraz musisz napisać dołączony kod w tym pliku. W tym kodzie najpierw zamieściliśmy bibliotekę unistd.h. Następnie stworzyliśmy funkcję main, aw ramach tej funkcji stworzyliśmy wywołanie systemowe write. W tym wywołaniu systemowym pierwszym parametrem jest deskryptor pliku. W tym przypadku liczba całkowita 1 reprezentuje ekran urządzenia wyjściowego i jest stała. Więc nasze wyjście zostanie pokazane na ekranie. Drugi parametr pokazuje dane bufora. Możesz dodać do tego wszystko. A ostatni parametr pokazuje liczbę zliczeń dla danych podanych w parametrze bufora. Jak wspomnieliśmy 5 jako liczbę zliczeń, pokaże tylko pierwsze 5 bajtów danych bufora i zignoruje pozostałe bajty. Zapisz ten kod za pomocą klawisza skrótu Ctrl+S i zamknij ten plik za pomocą polecenia Ctrl+X.

#włączać

Int główny()

{Pisać(1Aksa Yasin5);}

Teraz w terminalu wypróbuj poniższe polecenie gcc, aby skompilować ten nowo utworzony kod z nazwą pliku.

$gccnowy.c

Sprawdźmy ten kod, używając domyślnego pliku a.out utworzonego w czasie wykonywania. Wypróbuj więc poniższe polecenie a.out, aby sprawdzić dane wyjściowe wywołania systemowego write. Musimy go użyć z ./, aby wybrać plik z bieżącego katalogu.

$./a.out

Dane wyjściowe, które możesz zobaczyć, wyświetlały tylko słowo Aqsa ze względu na liczbę 5.

Zmieńmy trochę nasz kod. Zmieniliśmy liczbę licznika na 11, ponieważ w naszym buforze danych Aqsa Yasin mamy w sumie 11 bajtów. Tak więc tym razem dane wyjściowe pokażą całe bajty danych ciągu Aqsa Yasin. Zapisz ten plik za pomocą Ctrl+S i wyjdź za pomocą klawisza skrótu Ctrl+X.

Skompilujmy zaktualizowany kod za pomocą nowo zainstalowanego kompilatora gcc dla dystrybucji Linuksa. Wypróbuj to samo polecenie gcc wraz z nazwą pliku jako nowy.c.

$gccnowy.c

Teraz wyświetl wynik tego samego kodu za pomocą poprzedniego polecenia a.out, jak poniżej. Dane wyjściowe pokazują pełny ciąg Aqsa Yasin bufora.

$./a.out

Zobaczmy, jak działa kod, gdy liczba zliczeń jest większa niż całkowita liczba bajtów zawartych w buforze. Tak więc używamy licznika jako 30. Zapisz i zamknij plik.

Skompiluj ten sam zaktualizowany plik za pomocą polecenia gcc, jak poniżej.

$gccnowy.c

Teraz uruchom plik za pomocą polecenia a.out, a dane wyjściowe pokażą dane z bufora, a także pewną wartość śmieci, jak pokazano w danych wyjściowych migawki poniżej.$ ./a.out

Możesz również sprawdzić całkowitą liczbę bajtów zapisanych w pliku, używając poniższego kodu w tym samym pliku.

Skompiluj kod za pomocą instrukcji gcc.

$gccnowy.c

Dane wyjściowe pokazują całkowitą liczbę bajtów, w tym dane bufora i podział wiersza, za pomocą polecenia a.out.

$./a.out

Wniosek:

W tym samouczku opracowaliśmy koncepcję użycia wywołania systemowego Write w języku C. Wypróbuj wszystkie przykłady, aby zrozumieć ideę wywołania systemowego Write, korzystając z tego artykułu.