Jak używać otwartego wywołania systemowego w C

How Use Open System Call C



Wywołania systemowe są używane w dystrybucjach Linuksa, aby zapewnić przejście do systemu operacyjnego Linux i programów. System operacyjny Linux korzysta z biblioteki Glibc do obsługi wywołań systemowych w nim przy użyciu języka C. Istnieje również wiele innych sposobów wykorzystania wywołań systemowych. W tym przewodniku po artykule omówimy otwarte wywołanie systemowe w systemie Linux. Wywołanie systemowe Open zostało użyte do szybkiego otwarcia pliku określonego w ścieżce. Daje nam znać o deskryptorze pliku utworzonego przez użytkownika. Używaliśmy Ubuntu 20.04, aby uzyskać praktyczne wywołanie systemu Open.

Zainstaluj biblioteki

Język C wymaga zainstalowania kilku dodatkowych pakietów bibliotek jako wymagań wstępnych. Przede wszystkim musisz zainstalować pakiet manpages-dev, aby sprawdzić informacje dotyczące wywołań systemowych. Otwórz terminal wiersza poleceń z obszaru aktywności i wykonaj poniższą instrukcję, aby zainstalować strony podręcznika.







$ sudo apt install strony podręcznika-dev



Poniżej przedstawiono wynik zakończenia instalacji.







Teraz sprawdzimy otwarte wywołanie systemowe za pomocą polecenia man, jak poniżej.

$ mężczyzna2otwarty



Wyjściowa strona man dla wywołania systemowego Open została pokazana poniżej. Możesz zobaczyć dodatkowe informacje na ten temat. Naciśnij przycisk q, aby z niego wyjść.

Powyższa składnia pokazuje pierwsze trzy wiersze niezbędnych bibliotek, które należy dodać do wywołań systemowych. Dostępne są trzy składnie otwartego wywołania systemowego. Pierwsza składnia zawiera nazwę ścieżki, która jest nazwą pliku, który ma zostać otwarty. Drugi parametr, flags, pokazuje tryb pliku, np. odczyt lub zapis. Druga składnia może być używana, gdy plik nie istnieje. Tryb parametrów służy do pokazywania uprawnień do pliku.

Teraz nadszedł czas, aby zainstalować kompilator GCC do debugowania kodu C w dystrybucji Linux Ubuntu 20.04. W tym celu wykonaj poniższą instrukcję w powłoce, aby to zrobić.

$ sudo apt zainstaluj gcc

Wymaga dotknięcia Y, aby kontynuować instalację kompilatora GCC, w przeciwnym razie naciśnij przycisk n, aby zamknąć instalację. Więc naciśnij przycisk y i naciśnij Enter, aby kontynuować.

Dane wyjściowe dla ukończenia pokazano poniżej.

Przykład 01

Spójrzmy na bardzo prosty przykład wywołania systemowego Open. Najpierw otwórz powłokę poleceń i utwórz nowy plik tekstowy test.txt za pomocą prostego polecenia dotykowego w następujący sposób:

$dotykaćtest.txt

Dodaj do niego dane ręcznie. Możesz zobaczyć dane w pliku za pomocą poniższego polecenia cat.

$Kottest.txt

Teraz utwórzmy nowy plik C za pomocą polecenia nano w powłoce, jak pokazano poniżej.

$nanonowy.c

Zostanie otwarty poniższy plik GNU nano. Musisz wpisać w nim poniższy kod języka C. Możesz zobaczyć, że dodaliśmy niezbędne pakiety bibliotek, aby kod C działał poprawnie. Następnie zdefiniowaliśmy funkcję main do pracy z wywołaniem systemowym Open. Zadeklarowaliśmy dwie zmienne całkowite. Zmienna n służy do zliczania wartości bufora, a fd jest używany jako deskryptor pliku. Tablicę bufora typu znaków zadeklarowaliśmy jako buf o rozmiarze 50. Wywołanie systemu otwartego zostało użyte do odczytania zawartości pliku test.txt i zwrócenia go do deskryptora pliku. O_RDONLY został użyty do celów czytania. Następny wiersz pokazuje wywołanie systemowe read, które zbiera 10 bajtów z bufora i zwraca je do liczby całkowitej n. Ponadto polecenie write zostało użyte do zapisania zawartości lub danych bufora do deskryptora pliku, który jest ekranem wyjściowym W naszym przypadku w tej chwili. Zapisz ten plik za pomocą Ctrl + S i zamknij go za pomocą polecenia Ctrl + X.

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

intGłówny()
{
intn,fd;
zwęglaćbufia[pięćdziesiąt];
fd=otwarty(test.tekst,O_RDONLY);
n=czytać(fd,bufia, 10);
pisać(1 ,bufia, 10);

Najpierw skompilujmy kod C dla otwartego wywołania systemowego za pomocą poniższego polecenia gcc.

$gccnowy.c

Teraz nadszedł czas, aby sprawdzić dane wyjściowe kodu C dla otwartego wywołania systemowego. Użyjmy poniższego polecenia a.out w powłoce. Dane wyjściowe wyświetlają 10 bajtów z zawartości pliku test.txt.

$./do.na zewnątrz

Weźmy inny przykład, aby zapisać zawartość jednego pliku do innego pliku za pomocą wywołania systemowego Open. Aby utworzyć nowy plik C za pomocą polecenia nano, jak poniżej.

$ nano nowy.C

Więc weź ten sam kod z niewielką zmianą. W kodzie zdefiniowaliśmy inny deskryptor pliku jako fd1. Cały kod jest taki sam, z wyjątkiem jednej dodatkowej linii. W przedostatnim wierszu kodu użyto otwartego wywołania systemowego do utworzenia nowego pliku o nazwie target przy użyciu O_CREAT i trybu tylko do zapisu jako O_WRONLY. 0642 pokazuje uprawnienia przypisane do tego pliku. A plik został zwrócony do nowego deskryptora pliku. Następna linia pokazuje polecenie zapisu bajtów zawartości w buforze zgodnie z jego deskryptorem pliku. Zapisz plik i zamknij go.

Wykonaj polecenie kompilacji gcc, aby debugować plik języka C.

$ gcc nowy.C

Aby wyświetlić wyjście kodu C, wypróbuj instrukcję a.out w powłoce, jak poniżej. Brak danych wyjściowych, ponieważ dane wyjściowe zostały przekierowane do nowo utworzonego pliku docelowego.

$./do.na zewnątrz

Sprawdźmy dane docelowego pliku za pomocą polecenia cat. Dane wyjściowe pokazują, że plik zawiera 20 bajtów.

$ koci cel

Wniosek

W powyższym samouczku wyjaśniliśmy, jak używać otwartego wywołania systemowego w języku C za pomocą kompilatora gcc. Z pomocą różnych przykładów wyjaśnionych w tym przewodniku poprowadzi Cię do wdrożenia pożądanego programu.