Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Serwer potoku określa tryb typu potoku, tryb odczytu i tryb oczekiwania w dwPipeMode parametru funkcji CreateNamedPipe. Klienci potoków mogą określać te tryby potoków dla uchwytów potoków przy użyciu funkcji CreateFile.
Tryb typów
Tryb typu potoku określa sposób zapisywania danych w nazwanym potoku. Dane mogą być przesyłane za pośrednictwem nazwanego potoku jako strumień bajtów lub jako strumień komunikatów. Serwer potoku określa typ potoku podczas wywoływania CreateNamedPipe, aby utworzyć wystąpienie nazwanego potoku. Tryby typów muszą być takie same dla wszystkich wystąpień potoku.
Aby utworzyć potok typu bajtowego, określ PIPE_TYPE_BYTE lub użyj wartości domyślnej. Dane są zapisywane w potoku jako strumień bajtów, a system nie rozróżnia bajtów zapisanych w różnych operacjach zapisu.
Aby utworzyć potok typu komunikatu, określ PIPE_TYPE_MESSAGE. System traktuje bajty zapisane w każdej operacji zapisu w potoku jako jednostkę komunikatu. System zawsze wykonuje operacje zapisu w potokach typu komunikatów, tak jakby włączono tryb zapisu.
Tryb odczytu
Tryb odczytu potoku określa, jak dane są odczytywane z nazwanego potoku. Serwer potoku określa początkowy tryb odczytu dla uchwytu potoku podczas wywoływania CreateNamedPipe. Dane mogą być odczytywane w trybie odczytu bajtowego lub w trybie odczytu komunikatów. Dojście do potoku typu bajtowego może być tylko w trybie odczytu bajtowego. Dojście do potoku typu komunikatu może być w trybie odczytu bajtów lub odczytu komunikatów. W przypadku potoku typu komunikatu tryb odczytu może być inny w przypadku obsługi serwera i klienta w tym samym wystąpieniu potoku.
Aby utworzyć uchwyt potoku w trybie odczytu bajtów, określ PIPE_READMODE_BYTE lub użyj wartości domyślnej. Dane są odczytywane z potoku jako strumień bajtów. Operacja odczytu jest zakończona pomyślnie, gdy wszystkie dostępne bajty w potoku są odczytywane lub gdy jest odczytywana określona liczba bajtów.
Aby utworzyć uchwyt potoku w trybie odczytu komunikatów, określ PIPE_READMODE_MESSAGE. Dane są odczytywane z potoku jako strumień komunikatów. Operacja odczytu została ukończona pomyślnie tylko wtedy, gdy cały komunikat jest odczytywany. Jeśli określona liczba bajtów do odczytania jest mniejsza niż rozmiar następnego komunikatu, funkcja odczytuje jak najwięcej komunikatu przed zwróceniem zera (funkcja GetLastError zwraca ERROR_MORE_DATA). Pozostała część komunikatu może być odczytywana przy użyciu innej operacji odczytu.
W przypadku klienta potoku, dojście potoku zwrócone przez CreateFile jest zawsze w trybie odczytu bajtów początkowo. Zarówno klienci potoku, jak i serwery potoków mogą używać funkcji SetNamedPipeHandleState, aby zmienić tryb odczytu uchwytu potoku. Uchwyt potoku musi mieć prawo dostępu FILE_WRITE_ATTRIBUTES.
Tryb oczekiwania
Tryb oczekiwania uchwytu potoku określa, jak funkcje ReadFile, WriteFilei ConnectNamedPipe obsługują długotrwałe operacje. W trybie oczekiwania blokującego funkcje czekają na nieokreślony proces na drugim końcu potoku, aby ukończyć operację. W trybie oczekiwania bezblokowania funkcje zwracają się natychmiast w sytuacjach, które w przeciwnym razie wymagają nieskończonego oczekiwania.
Operacja ReadFile ma wpływ na tryb oczekiwania uchwytu potoku, gdy potok jest pusty. W przypadku uchwytu oczekiwania blokującego operacja nie zostanie ukończona pomyślnie, dopóki dane nie będą dostępne z wątku zapisu na drugim końcu potoku. Użycie uchwytu oczekiwania bezblokowania funkcja zwraca zero natychmiast, a funkcja GetLastError zwraca ERROR_NO_DATA.
Operacja WriteFile ma wpływ na tryb oczekiwania uchwytu potoku, gdy w buforze potoku jest za mało miejsca. W przypadku uchwytu oczekiwania blokującego operacja zapisu nie może zakończyć się powodzeniem, dopóki w buforze nie zostanie utworzona wystarczająca ilość miejsca przez odczyt wątku z drugiego końca potoku. W przypadku uchwytu bezblokowania oczekiwania operacja zapisu zwraca wartość niezerową natychmiast, bez zapisywania żadnych bajtów (dla potoku typu komunikatu) lub po zapisaniu tyle bajtów, jak bufor zawiera (dla potoku typu bajtów).
Na operację ConnectNamedPipe wpływa tryb oczekiwania dojścia potoku, gdy klient nie jest podłączony lub czeka na połączenie z wystąpieniem potoku. W przypadku uchwytu oczekiwania blokującego operacja łączenia nie powiedzie się, dopóki klient potoku nie połączy się z wystąpieniem potoku, wywołując funkcję CreateFile lub CallNamedPipe. Dzięki nieblokującej obsłudze oczekiwania operacja łączenia zwraca zero natychmiast, a funkcja GetLastError zwraca ERROR_PIPE_LISTENING.
Domyślnie wszystkie nazwane dojścia potoku zwrócone przez CreateNamedPipe lub funkcji CreateFile są tworzone z włączonym trybem oczekiwania blokującego. Aby utworzyć potok w trybie oczekiwania bezblokowania, serwer potoku określa PIPE_NOWAIT podczas wywoływania CreateNamedPipe.
Zarówno klienci potoku, jak i serwery potoków mogą zmieniać tryb oczekiwania uchwytu potoku, określając PIPE_WAIT lub PIPE_NOWAIT w wywołaniu funkcji SetNamedPipeHandleState.
Nuta
Tryb oczekiwania bezblokowania jest obsługiwany w celu zapewnienia zgodności z programem Microsoft LAN Manager w wersji 2.0. Ten tryb nie powinien być używany do osiągnięcia nakładających się danych wejściowych i wyjściowych (We/Wy) z nazwanymi potokami. Zamiast tego należy użyć nakładających się operacji we/wy, ponieważ umożliwia wykonywanie czasochłonnych operacji w tle po powrocie funkcji. Aby uzyskać więcej informacji na temat nakładających się operacji we/wy, zobacz synchroniczne i nakładające się dane wejściowe i wyjściowe.