Przeczytaj Syscall w Linux

Przeczytaj Syscall w Linux

„Jak mówi tytuł, że wywołanie systemu odczytu musi czytać coś z określonej lokalizacji. Linux dostarcza nam wywołanie systemu odczytu do odczytu danych z dowolnego pliku i wyświetlania ich na konsoli, a jądro systemu Linux powinno być zaangażowane w cały ten proces, tj.mi., Aby otworzyć plik, odczytaj go, zapisz dane do innego pliku itp. Ten przewodnik będzie premią do każdego użytkownika Linux i C, który chce nauczyć się korzystać z wywołania systemu odczytu podczas kodowania. Przed spojrzeniem na fragment kodu C utworzymy plik tekstowy i plik C. Plik tekstowy będzie zawierał losowe dane tekstowe, które będą używane przez funkcję Read (). Oba pliki są tworzone przez to samo „dotyk” jeden po drugim, a zapytanie „LS” pokazuje je w folderze domowym."

Dodaliśmy 3 wiersze tekstu w pliku tekstowym.plik txt, abyśmy mogli uzyskać do niego dostęp za pomocą funkcji read (). Te 3 linie są wyświetlane za pomocą zapytania „CAT”.

Przykład 01

W naszym pierwszym przykładzie będziemy pokazać użycie połączenia systemowego lub funkcji POSIX w celu uzyskania dostępu do danych z określonego pliku i wyświetlania ich na konsoli. Przykładowy kod rozpoczyna się od podstawowych 3 plików nagłówka. Stdio.H i Unistd.H nagłówki są używane do standardowych funkcji wejściowych/wyjściowych. Fcntl.H służy do korzystania z funkcji odczytu i zapisu POSIX do tworzenia i dostępu do plików. Snippet pokazany poniżej został zainicjowany z deklaracją bufora znaków o rozmiarze 100. Dane tekstowe, które zostały pokazane w pliku tekstowym.Plik TXT z powyższego obrazu będzie dostępny i wyświetlany w fragmentach.

Instrukcja printf () jest wykorzystywana 3 razy, aby poinformować nas o liczbie wszystkich znaków, które zostanie pobrane z pliku i wyświetlone na konsoli. Trzy deskryptory plików, F1, F2 i F3, są używane osobno do wywołania funkcji „Open ()” C, aby otworzyć plik tekstowy.plik txt w trybie tylko do odczytu za pomocą opcji „O_rdonly”. Zmienne N1, N2 i N3 są wykorzystywane do pobrania zwróconego wyniku od wywołania funkcji „odczyt” odpowiednio 3 razy.

Za każdym razem przekazujemy go bufor lub tablicę typu, i.mi., ARR, inny deskryptor pliku, i.mi., F1, F2, F3 i inna liczba znaków, do których można uzyskać dostęp z pliku i zapisywać do bufora, i.mi., Odpowiednio 20, 40 i 60. Za każdym razem używamy zwróconego wyniku, i.mi., N1, N2, N3, w połączeniu z funkcją zapisu (), aby uzyskać dostęp do zmiennej bufora „ARR” z pierwszym parametrem jako „1”. Ta funkcja zapisu wyświetliłaby 20, 40 i 60 znaków po odczytaniu z pliku plik tekstowego.TXT w buforze postaci „ARR”. Instrukcja printf () była używana za każdym razem do dodania przerwy w linii za pomocą „\ n” w obszarze ciągów.

W ten sposób, za każdym razem, niektóre dane tekstowe byłyby wyświetlane na powładzie po funkcji Read ().tekst.„Szybko zapiszmy nasz kod przed kompilacją.

#włączać
#włączać
#włączać
int main ()
Char ARR [100];
printf („czytanie 20 znaków… \ n”);
int f1 = otwarty ("plik tekstowy.txt ", o_rdonly);
int n1 = odczyt (f1, arr, 20);
Write (1, Arr, N1);
printf („\ n”);
printf („czytanie 40 znaków… \ n”);
int f2 = otwarty ("plik tekstowy.txt ", o_rdonly);
int n2 = odczyt (f2, arr, 40);
Write (1, ARR, N2);
printf („\ n”);
printf („czytanie 60 znaków… \ n”);
int f3 = otwarty ("plik tekstowy.txt ", o_rdonly);
int n3 = odczyt (f3, arr, 60);
Write (1, ARR, N3);
printf („\ n”);

Po skoncentracji tego kodu z kompilatorem „GCC” C, wypróbowaliśmy „./A.OUT „Polecenie uruchomienia skompilowanego kodu. Pokazuje 20, 40 i 60 znaków z pliku tekstowego za pomocą „Odczyt."

Przykład 02

Załóżmy, że pokazałeś dane o pile w pliku tekstowym.plik txt i chcesz przenieść dokładną liczbę znaków do innego pliku. W tym celu będziesz używać funkcji Read (.

Teraz użyjemy tych samych nagłówków, które wykorzystaliśmy w powyższym przykładzie do odczytania z pliku do zmiennej bufora. Metoda główna () tego kodu jest inicjowana z tablicą 40-znakową „ARR.„Instrukcje wyjściowe printf () są wykorzystywane na każdym etapie, aby wyjaśnić każdy i wszystko szczegółowo, i.mi., Otwarcie pliku, odczyt z pliku, tworzenie innego pliku, kopiowanie danych z pierwszego pliku do drugiego pliku itp. Oprócz tego używaliśmy funkcji sleep () podczas inicjalizacji każdego kroku w tym przykładowym kodzie. Po pierwszej funkcji sleep () używamy funkcji Open (), aby otworzyć nasz plik o nazwie „plik tekstowy.txt ”w trybie odczytu i zapisz wynik powrotny na plik deskryptora FD1.

W następnym kroku użyjemy funkcji Read () do odczytania danych z pliku tekstowego.TXT za pomocą deskryptora pliku FD1. Musisz zwrócić uwagę na jedną rzecz; Czytamy tylko 30 znaków z pliku i zapisujemy je do tablicy postaci „ARR.”Jeśli funkcja Read () działa dobrze, zwróci pewien numer sukcesu do zmiennej liczby całkowitych„ N.„W trzecim kroku tworzyliśmy inny plik o nazwie„ Dest.txt ”ponownie za pomocą funkcji Open ().

Na tym etapie dostarczono dwie opcje otwarte. W ostatnim kroku odrzucamy wywołanie systemowe zapisu (), przekazując go deskryptor pliku FD2, zmienną „n” i tablicę bufora „ARR”, aby skopiować dane z bufora „ARR” do drugiego pliku za pomocą F2.

#włączać
#włączać
#włączać
int main ()
Char ARR [40];
printf („Otwarcie pliku tekstowego.txt w trybie tylko do odczytu… \ n ”);
sen (3);
int fd1 = otwarty (”plik tekstowy.txt ", o_rdonly);
printf („czytanie z niego… \ n”);
sen (3);
int n = odczyt (fd1, arr, 30);
printf („Tworzenie innego pliku do pisania w nim… \ n”);
sen (3);
int fd2 = otwarty („dest.txt ", O_Creat | O_Wronly, 0642);
printf („Pisanie pliku tekstowego.Dane TXT do Dest.plik txt… \ n ”);
sen (3);
Write (FD2, ARR, N);
printf („\ n”);

W przypadku wykonania kodu pierwszy plik został otwarty, a tablica „ARR” odczytała z niego dane.

Nowy plik został utworzony w trybie zapisu.

Dane z tablicy znaków „ARR” są przekazywane do drugiego pliku.

Dane 30-znakowe zostały pomyślnie skopiowane do Dest.plik txt, jak pokazano poniżej.

Wniosek

W tym przewodniku krótko wyjaśniliśmy użycie wywołania systemu Read () w języku C. W tym celu wykorzystaliśmy tablice buforowe do odczytu danych z określonego pliku i wyświetlania na konsoli. Użyliśmy również tablicy funkcji Read () i bufora do kopiowania danych tekstowych z jednego pliku do drugiego.