Przykład: Funkcja GetsockName
Spójrzmy na przykład funkcji GetsockName w C. Skorzystaj z skrótu klucza „CTRL+Alt+T”, aby szybko otworzyć aplikację wiersza polecenia na ekranie. Może to potrwać tylko 10 sekund, a twój terminal będzie gotowy do użycia. W obszarze instrukcji terminalu musisz wpisać zapytanie „dotknij” wraz z „nazwą pliku”, aby wygenerować zupełnie nowy plik w twoim systemie, i.mi., pusty. Dostępnych jest wiele opcji, aby otworzyć ten nowo wygenerowany plik, i.mi., vim, nano lub edytor tekstu. Użytkownicy mogą najpierw otwierać go w edytorze tekstu, utworzyć kod, aktualizować lub zmodyfikować kod, a następnie wykonać w ramach powłoki. Można to zrobić, po prostu dwukrotnie stukając nazwę pliku przebywającą w folderze „Home” Eksploratora pliku. Jeśli użytkownicy chcą otworzyć pusty plik w edytorze „GNU Nano”, mogą użyć polecenia terminalowego „Nano”. Napisz tę instrukcję i naciśnij Enter, aby ją wykonać. Wymieniono zarówno instrukcje tworzenia i otwierania plików:
Kod C zaczyna się od włączenia niektórych głównych i ważnych plików nagłówka. Słowo kluczowe „w tym” jest używane ze znakiem skrótu, aby to zrobić. Tutaj używanych jest 11 nagłówków. „Stdio.H ”został użyty do uzyskania standardowego wejścia i wyjścia. „Unistd.H". jest wykorzystywany do dostępu do API systemu operacyjnego POSIX, i.mi., Systemy Linux i Unix podobne do. „Stdlib.H ”nagłówek to standardowa biblioteka do celów ogólnych, i.mi., Wpisz konwersje, zarządzanie procesami, alokacje do przechowywania itp. „Errno.h ”jest używany głównie do problemów z błędami i raportowaniem. „String.Moduł H ”dla C służy do obsługi ciągów wraz z niektórymi innymi funkcjami. „SYS/Type.Nagłówek H ”jest wykorzystywany do zdefiniowania typów danych zmiennych i funkcji używanych w naszym kodzie programu.
Plik nagłówka „SYS/STAT.H ”jest tutaj używany do opisania budowy zwróconych danych informacyjnych. Biblioteka nagłówka „Sys/gniazdo.h ”zostanie wykorzystane do korzystania z funkcji i zmiennych gniazd w naszym kodzie. „Sys/un.H ”biblioteka nagłówka jest tutaj, aby zapisać adresy gniazd podobnych do Unix. „Netint/in.H ”jest specjalnie zaprojektowany do zainicjowania zmiennego typu struktury dla adresu IPv6 w pętli.
Zmienne inet addrstlen lub inet6 addrstlen zwykle są zdefiniowane w „ARPA/INET.H ”biblioteka nagłówka. Po wszystkich plikach nagłówka zaimplementowaliśmy funkcję zdefiniowaną przez użytkownika o nazwie „Showerror”, biorąc jeden argument wskaźnika stałego znaku „E”. Ten argument wskaźnika odnosi się do niektórych błędów znalezionych do tej pory w naszym kodzie. W przypadku języka programowania C, metoda błędu POSIX, i.mi., Perror jest używany do wyświetlania komunikatu odpowiedzi na błąd na „stderr” w zależności od warunków błędu Errno. Wyświetla „STR” i komunikat odpowiedzi na błąd zgodny z uniwersalnym, zmiennym errno, zgodnie z kodem programu. Funkcja „Perror” wykorzystuje argument „E” jako komunikat o błędzie, aby. Funkcja „Wyjdź (1)” jest tutaj, aby wyjść lub zakończyć funkcję „showerror ()” w tej chwili:
Oto funkcja „sock_addr” typu wskaźnika, biorąc trzy argumenty w swoich parametrach. Parametr „S” reprezentuje gniazdo, a do przechowywania danych gniazda zostanie użyta zmienna wskaźnika typu znaku „BUF”. Podczas gdy ostatni argument „Bufsize” typu „size_t” zostanie użyty do zdefiniowania rozmiaru zmiennej bufora lub po prostu buforowania. W ramach tej funkcji utworzyliśmy strukturę o nazwie „AddR” do przechowywania adresu gniazda. Długość zmiennej „AddR” została zapisana w zmiennej typu liczb całkowitych „len”, stosując na niej funkcję „rozmiar”.
Funkcja getsockName () została tutaj wykorzystana do uzyskania nazwy gniazda. Ta funkcja wykorzystuje gniazdo, adresy gniazda i długość gniazda jako argumenty wejściowe. Niezależnie od odpowiedzi na funkcję GetsockName, odpowiedź będzie przechowywana w zmiennej „Z”, i.mi., zebrane czy nie. Oświadczenie „jeśli” jest tutaj, aby sprawdzić warunek, że zmienna „Z” otrzymała kod stanu zwrotu jako -1, i.mi., FAŁSZ. Oznacza to, że jeśli nie możesz uzyskać nazwy gniazda, zwróci Null do funkcji wywołania. Funkcja „snprintf” służy do uzyskania adresu gniazda, konwertowania go na formę łańcuchową i wyświetlanie na powładzie. W tym celu rozmiar bufora i bufora musi być używany jako argument. Adres portu gniazda jest wykorzystywany w funkcji „NTOHS” do konwersji go na kod bajtów hosta:
Funkcja Main () bierze 4 argumenty w swoim parametrze. Zmienna adresu typu struktury „Addr” dla gniazda jest zadeklarowana ze zmienną typu znaku „BUF” o rozmiarze 64. Następnie tworzymy gniazdo internetowe IPv4 za pomocą funkcji gniazda. Ten status gniazda zwraca kod i zostanie zapisany do zmiennej „SCK_INET”. Jeśli gniazdo nie utworzy się skutecznie, takie jak SCK_INET nie jest równe zero, wywoła komunikat „showerror”, przekazując go prostym tekstem „socket ()”.
Następnie próbowaliśmy utworzyć adres „AF_INET”. Funkcja memset () służy do zainicjowania adresu dla gniazda do 0. Rodzina adresu gniazda została zainicjowana jako „AF_INET”, jego port jest również zadeklarowany, podczas gdy funkcja htonów jest tutaj, aby przetłumaczyć format bajtu hosta na format bajtu sieciowego. Funkcja INET_ATON wykorzystuje lokalny adres IP do konwersji na standardowy format ciągu i zapisać w zmiennej adresu gniazda. Rozmiar zmiennej adresu jest przechowywany w zmiennej „len”. Funkcja BIND () wiąże adres do gniazda i zapisuje kod powrotu statusu w „Z”. Jeśli kod stanu to „-1”, i.mi., Fałsz, wywoła komunikat „showerror” podczas wywoływania w nim funkcji bind (). Jeśli funkcja „sock_addr ()” nie może zostać wywołana, wywoła również funkcję „showerror”, biorąc „sock_addr” jako argument. Instrukcja PrintF pokazuje nazwę przechowywaną w buforze:
Funkcja zamykająca jest wywoływana w celu zamknięcia gniazda internetowego IPv4:
Po kompilacji i wykonaniu mamy nazwę gniazda, na której podłączony jest nasz system:
Wniosek:
Ten artykuł jest rzeczywiście potrzebą każdego użytkownika C chętnie wyszukiwania przykładu „GetsockName” w Linux. W tym przewodniku omówiliśmy jeden przykład. Próbowaliśmy uprościć dla naszych użytkowników, ponieważ kod został podzielony na fragmenty. Mamy nadzieję, że ten artykuł będzie bardzo pomocny. Sprawdź inne artykuły w Linux, aby uzyskać więcej wskazówek i samouczków.