Bagikan melalui


Operasi Pipa Bernama

Pertama kali server pipa memanggil fungsi CreateNamedPipe , server 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 dengan memanggil fungsi CreateFile atau CallNamedPipe . 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 tersambung ke instans pipa dengan memanggil fungsi ConnectNamedPipe . Jika handel pipa dalam mode tunggu pemblokiran, ConnectNamedPipe tidak akan 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:

  • Fungsi ReadFile dan WriteFile dapat digunakan dengan pipa jenis byte atau jenis pesan.
  • Fungsi ReadFileEx dan WriteFileEx dapat digunakan dengan pipa jenis byte atau jenis pesan jika handel pipa dibuka untuk operasi yang tumpang tindih.
  • Fungsi PeekNamedPipe dapat digunakan untuk membaca tanpa menghapus konten pipa jenis byte atau pipa jenis pesan. PeekNamedPipe juga dapat mengembalikan informasi tambahan tentang instans pipa.
  • Fungsi TransactNamedPipe 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 fungsi FlushFileBuffers , 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 fungsi DisconnectNamedPipe 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).