Bagikan melalui


Operasi Pipa Bernama

Pertama kali server pipa memanggil fungsiCreateNamedPipe, server tersebut menggunakan parameter nMaxInstances untuk menentukan jumlah maksimum instans pipa yang dapat ada secara bersamaan. Server dapat memanggil CreateNamedPipe berulang kali untuk membuat instans tambahan pipa, selama tidak melebihi jumlah maksimum instans. Jika fungsi berhasil, setiap panggilan mengembalikan handel ke akhir server dari instans pipa bernama.

Segera setelah server pipa membuat instans pipa, klien pipa dapat terhubung ke sana dengan memanggil fungsiCreateFile atauCallNamedPipe. Jika instans pipa tersedia, CreateFile mengembalikan handel ke akhir klien instans pipa. Jika tidak ada instans pipa yang tersedia, klien pipa dapat menggunakan fungsi WaitNamedPipe untuk menunggu hingga pipa tersedia.

Server pipa dapat menentukan kapan klien pipa terhubung ke instans pipa dengan memanggil fungsiConnectNamedPipe. Jika handel pipa dalam mode tunggu pemblokiran, ConnectNamedPipe tidak kembali hingga klien tersambung.

Klien dan server pipa dapat memanggil salah satu dari beberapa fungsi — selain CallNamedPipe — untuk membaca dari dan menulis ke pipa bernama. Perilaku fungsi-fungsi ini tergantung pada jenis pipa dan mode yang berlaku untuk handel pipa yang ditentukan, sebagai berikut:

  • FungsiReadFile dan WriteFile dapat digunakan dengan pipa jenis byte atau jenis pesan.
  • FungsiReadFileEx danWriteFileEx dapat digunakan dengan pipa jenis byte atau jenis pesan jika handel pipa dibuka untuk operasi yang tumpang tindih.
  • FungsiPeekNamedPipe dapat digunakan untuk membaca tanpa menghapus konten pipa jenis byte atau pipa jenis pesan. PeekNamedPipe juga dapat mengembalikan informasi tambahan tentang instans pipa.
  • FungsiTransactNamedPipe dapat digunakan dengan pipa dupleks jenis pesan jika handel pipa ke proses panggilan diatur ke mode baca pesan. Fungsi ini menulis pesan permintaan dan membaca pesan balasan dalam satu operasi, meningkatkan performa jaringan.

Server pipa tidak boleh melakukan operasi baca pemblokiran hingga klien pipa dimulai. Jika tidak, kondisi balapan dapat terjadi. Ini biasanya terjadi ketika kode inisialisasi, seperti pustaka run-time C, perlu mengunci dan memeriksa handel yang diwariskan.

Ketika klien dan server selesai menggunakan instans pipa, server harus terlebih dahulu memanggil fungsiFlushFileBuffers, untuk memastikan bahwa semua byte atau pesan yang ditulis ke pipa dibaca oleh klien. FlushFileBuffers tidak kembali sampai klien membaca semua data dari pipa. Server kemudian memanggil fungsiDisconnectNamedPipe untuk menutup koneksi ke klien pipa. Fungsi ini membuat handel klien tidak valid, jika belum ditutup. Setiap data yang belum dibaca dalam pipa dibuang. Setelah klien terputus, server memanggil fungsi CloseHandle untuk menutup handelnya ke instans pipa. Atau, server dapat menggunakan ConnectNamedPipe untuk memungkinkan klien baru tersambung ke instans pipa ini.

Proses dapat mengambil informasi tentang pipa bernama dengan memanggil fungsi GetNamedPipeInfo, yang mengembalikan jenis pipa, ukuran buffer input dan output, dan jumlah maksimum instans pipa yang dapat dibuat. Fungsi GetNamedPipeHandleState melaporkan mode baca dan tunggu handel pipa, jumlah instans pipa saat ini, dan informasi tambahan untuk pipa yang berkomunikasi melalui jaringan. Fungsi SetNamedPipeHandleState mengatur mode baca dan mode tunggu handel pipa. Untuk klien pipa yang berkomunikasi dengan server jarak jauh, fungsi ini juga mengontrol jumlah maksimum byte untuk dikumpulkan atau waktu maksimum untuk menunggu sebelum mengirimkan pesan (dengan asumsi handel klien tidak dibuka dengan mode write-through diaktifkan).