C/Strumień: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
m →‎Typy: ref
m →‎standardowe: z eikipedii
Linia 41:
* dołączyć plik nagłówkowy [[C/Biblioteka standardowa/Indeks tematyczny#stdio.h|stdio.h]]
* nie musimy otwierać ani zamykać strumieni standardowych ( tak jak w przypadku niestandardowych plików : [[C/fopen|fopen]] i [[C/fclose|fclose]] )
==Gniazda==
 
'''Gniazdo''' ([[język angielski|ang.]] ''socket'') – pojęcie abstrakcyjne reprezentujące dwukierunkowy punkt końcowy połączenia. Dwukierunkowość oznacza możliwość wysyłania i odbierania danych. Wykorzystywane jest przez aplikacje do komunikowania się przez [[sieć komputerowa|sieć]] w ramach [[komunikacja międzyprocesowa|komunikacji międzyprocesowej]].
 
Gniazdo posiada trzy główne właściwości:
* typ gniazda identyfikujący protokół wymiany danych
* lokalny adres (np. adres IP, Internetwork Packet Exchange(IPX), czy Ethernet)
* opcjonalny lokalny numer portu identyfikujący proces, który wymienia dane przez gniazdo (jeśli typ gniazda pozwala używać portów)
 
Gniazdo może posiadać (na czas trwania komunikacji) dwa dodatkowe atrybuty:
# adres zdalny (np. adres IP, IPX, czy Ethernet)
# opcjonalny numer portu identyfikujący zdalny proces (jeśli typ gniazda pozwala używać portów)
 
Adres IP wyznacza węzeł w sieci, numer portu określa proces w węźle, a typ gniazda determinuje sposób wymiany danych.
 
Jeśli gniazdo używa Port protokołu|numerów portów, to lokalny numer portu może zostać przydzielony automatycznie i nosi wtedy nazwę efemerycznego numeru portu (ang. ''ephemeral port number''). Lokalny numer portu może też zostać wymuszony przez wykonanie przypisania (ang. ''bind'') gniazdu numeru pożądanego przez twórcę aplikacji. Próba użycia gniazda, które wymaga zdefiniowanego lokalnego numeru portu bez uprzedniego przypisania mu go, spowoduje automatyczne przydzielenie numeru efemerycznego przez system operacyjny]] lub bibliotekę (zależnie od implementacji).
 
Dwie ostatnie właściwości gniazda (lokalny adres i lokalny numer portu) lub dwa dodatkowe atrybuty (zdalny adres, zdalny numer portu) w połączeniu z typem gniazda nazywamy półasocjacją (ang. ''half-association''), ponieważ jest to połowa informacji potrzebnych do zaistnienia komunikacji między dwoma odległymi procesami. Asocjacją (ang. ''association'') zaś nazywamy typ gniazda (determinujący protokół), dwa adresy i dwa numery portów, które stanowią pełną wiedzę pozwalającą na identyfikację komunikujących się poprzez sieć procesów.
 
W systemach typu Unix obsługa gniazd jest implementowana w jądrze, a wykonywanie na nich operacji umożliwiają funkcje systemowe podobne do tych, jakich używa się w stosunku do plików.
 
Nazwę "gniazdo" przejęto od określenia "gniazdo" w elektryczności, czyli element sieci elektrycznej, do którego podłącza się urządzenia.
 
 
Programowanie gniazd to sposób łączenia dwóch węzłów w sieci w celu komunikowania się ze sobą. Jedno gniazdo (węzeł) nasłuchuje na określonym porcie w adresie IP, podczas gdy drugie gniazdo łączy się z drugim, aby utworzyć połączenie. Serwer tworzy gniazdo odbiornika, podczas gdy klient łączy się z serwerem.