Bagikan melalui


Mode Pipa, Baca, dan Tunggu Bernama

Server pipa menentukan mode jenis pipa, mode baca, dan mode tunggu dalam parameter dwPipeMode dari fungsi CreateNamedPipe . Klien pipa dapat menentukan mode pipa ini untuk handel pipa mereka menggunakan fungsi CreateFile .

Mode Tipe

Mode jenis pipa menentukan bagaimana data ditulis ke pipa bernama. Data dapat ditransmisikan melalui pipa bernama sebagai aliran byte atau sebagai aliran pesan. Server pipa menentukan jenis pipa saat memanggil CreateNamedPipe untuk membuat instans pipa bernama. Mode jenis harus sama untuk semua instans pipa.

Untuk membuat pipa jenis byte, tentukan PIPE_TYPE_BYTE atau gunakan nilai default. Data ditulis ke pipa sebagai aliran byte, dan sistem tidak membedakan antara byte yang ditulis dalam operasi tulis yang berbeda.

Untuk membuat pipa jenis pesan, tentukan PIPE_TYPE_MESSAGE. Sistem memperlakukan byte yang ditulis dalam setiap operasi tulis ke pipa sebagai unit pesan. Sistem selalu melakukan operasi tulis pada pipa jenis pesan seolah-olah mode write-through diaktifkan.

Mode Baca

Mode baca pipa menentukan bagaimana data dibaca dari pipa bernama. Server pipa menentukan mode baca awal untuk handel pipa saat memanggil CreateNamedPipe. Data dapat dibaca dalam mode byte-read atau mode baca pesan. Handel ke pipa jenis byte hanya dapat berada dalam mode byte-read. Handel ke pipa jenis pesan dapat berada dalam mode byte-read atau message-read. Untuk pipa jenis pesan, mode baca dapat berbeda untuk pegangan server dan klien ke instans pipa yang sama.

Untuk membuat handel pipa dalam mode byte-read, tentukan PIPE_READMODE_BYTE atau gunakan nilai default. Data dibaca dari pipa sebagai aliran byte. Operasi baca berhasil diselesaikan ketika semua byte yang tersedia dalam pipa dibaca atau ketika jumlah byte yang ditentukan dibaca.

Untuk membuat handel pipa dalam mode baca pesan, tentukan PIPE_READMODE_MESSAGE. Data dibaca dari pipa sebagai aliran pesan. Operasi baca berhasil diselesaikan hanya ketika seluruh pesan dibaca. Jika jumlah byte yang ditentukan untuk dibaca kurang dari ukuran pesan berikutnya, fungsi membaca sebanyak mungkin pesan sebelum mengembalikan nol (fungsi GetLastError mengembalikan ERROR_MORE_DATA). Sisa pesan dapat dibaca menggunakan operasi baca lain.

Untuk klien pipa, handel pipa yang dikembalikan oleh CreateFile selalu dalam mode byte-read pada awalnya. Klien pipa dan server pipa dapat menggunakan fungsi SetNamedPipeHandleState untuk mengubah mode baca handel pipa. Handel pipa harus memiliki akses FILE_WRITE_ATTRIBUTES yang tepat.

Mode Tunggu

Mode tunggu handel pipa menentukan bagaimana fungsi ReadFile, WriteFile, dan ConnectNamedPipe menangani operasi yang panjang. Dalam mode pemblokiran-tunggu, fungsi menunggu tanpa batas waktu untuk proses di ujung pipa lainnya untuk menyelesaikan operasi. Dalam mode nonblocking-wait, fungsi segera kembali dalam situasi yang jika tidak memerlukan waktu tunggu yang tidak terbatas.

Operasi ReadFile dipengaruhi oleh mode tunggu handel pipa saat pipa kosong. Dengan handel tunggu pemblokiran, operasi tidak berhasil diselesaikan sampai data tersedia dari penulisan utas ke ujung pipa lainnya. Menggunakan handel tunggu nonblocking, fungsi segera mengembalikan nol, dan fungsi GetLastError mengembalikan ERROR_NO_DATA.

Operasi WriteFile dipengaruhi oleh mode tunggu handel pipa ketika ruang di buffer pipa tidak mencukupi. Dengan handel tunggu pemblokiran, operasi tulis tidak dapat berhasil sampai ruang yang cukup dibuat di buffer oleh pembacaan utas dari ujung pipa lainnya. Dengan handel tunggu nonblocking, operasi tulis segera mengembalikan nilai bukan nol, tanpa menulis byte apa pun (untuk pipa jenis pesan) atau setelah menulis byte sebanyak yang dipegang buffer (untuk pipa jenis byte).

Operasi ConnectNamedPipe dipengaruhi oleh mode tunggu handel pipa ketika tidak ada klien yang tersambung atau menunggu untuk terhubung ke instans pipa. Dengan handel pemblokiran-tunggu, operasi sambungkan tidak berhasil sampai klien pipa terhubung ke instans pipa dengan memanggil fungsi CreateFile atau CallNamedPipe . Dengan handel tunggu nonblocking, operasi sambungkan segera mengembalikan nol, dan fungsi GetLastError mengembalikan ERROR_PIPE_LISTENING.

Secara default, semua handel pipa bernama yang dikembalikan oleh fungsi CreateNamedPipe atau CreateFile dibuat dengan mode pemblokiran-tunggu diaktifkan. Untuk membuat pipa dalam mode nonblocking-wait, server pipa menentukan PIPE_NOWAIT saat memanggil CreateNamedPipe.

Klien pipa dan server pipa dapat mengubah mode tunggu handel pipa dengan menentukan PIPE_WAIT atau PIPE_NOWAIT dalam panggilan ke fungsi SetNamedPipeHandleState .

Catatan

Mode tunggu nonblocking didukung untuk kompatibilitas dengan Microsoft LAN Manager versi 2.0. Mode ini tidak boleh digunakan untuk mencapai input dan output (I/O) yang tumpang tindih dengan pipa bernama. I/O yang tumpang tindih harus digunakan sebagai gantinya, karena memungkinkan operasi yang memakan waktu untuk berjalan di latar belakang setelah fungsi kembali. Untuk informasi selengkapnya tentang I/O yang tumpang tindih, lihat Input dan Output yang Sinkron dan Tumpang Tindih.