Bagikan melalui


Mode Buka Pipa Bernama

Server pipa menentukan akses pipa, tumpang tindih, dan mode write-through dalam parameter dwOpenMode dari fungsi CreateNamedPipe . Klien pipa dapat menentukan mode terbuka ini untuk handel pipa mereka menggunakan fungsi CreateFile .

Mode Akses

Mengatur mode akses pipa setara dengan menentukan akses baca atau tulis yang terkait dengan handel server pipa. Tabel berikut ini memperlihatkan hak akses generik yang setara untuk setiap mode akses yang dapat Anda tentukan dengan CreateNamedPipe.

Mode akses Hak akses generik yang setara
PIPE_ACCESS_INBOUND GENERIC_READ
PIPE_ACCESS_OUTBOUND GENERIC_WRITE
PIPE_ACCESS_DUPLEX GENERIC_READ | GENERIC_WRITE

 

Jika server pipa membuat pipa dengan PIPE_ACCESS_INBOUND, pipa bersifat baca-saja untuk server pipa dan hanya menulis untuk klien pipa. Jika server pipa membuat pipa dengan PIPE_ACCESS_OUTBOUND, pipa hanya menulis untuk server pipa dan baca-saja untuk klien pipa. Pipa yang dibuat dengan PIPE_ACCESS_DUPLEX bersifat baca/tulis untuk server pipa dan klien pipa.

Klien pipa yang menggunakan CreateFile untuk menyambungkan ke pipa bernama harus menentukan akses langsung di parameter dwDesiredAccess yang kompatibel dengan mode akses yang ditentukan oleh server pipa. Misalnya, klien harus menentukan akses GENERIC_READ untuk membuka handel untuk pipa yang dibuat server pipa dengan PIPE_ACCESS_OUTBOUND. Mode akses harus sama untuk semua instans pipa.

Untuk membaca atribut pipa seperti mode baca atau mode pemblokiran, handel pipa harus memiliki akses FILE_READ_ATTRIBUTES dengan benar; untuk menulis atribut pipa, handel pipa harus memiliki hak akses FILE_WRITE_ATTRIBUTES. Hak akses ini dapat dikombinasikan dengan hak akses generik yang sesuai untuk pipa: GENERIC_READ dengan FILE_WRITE_ATTRIBUTES untuk pipa baca-saja, atau GENERIC_WRITE dengan FILE_READ_ATTRIBUTES untuk pipa tulis-saja. Membatasi hak akses dengan cara ini memberikan keamanan yang lebih baik untuk pipa.

Mode Tumpang Tindih

Dalam mode tumpang tindih, fungsi yang melakukan operasi baca, tulis, dan sambungkan yang panjang dapat segera kembali. Ini memungkinkan utas untuk melakukan operasi lain saat operasi yang memakan waktu dijalankan di latar belakang. Untuk menentukan mode tumpang tindih, gunakan bendera FILE_FLAG_OVERLAPPED. Untuk informasi selengkapnya, lihat Input dan Output Sinkron dan Tumpang Tindih.

Fungsi CreateFile memungkinkan klien pipa untuk mengatur mode tumpang tindih (FILE_FLAG_OVERLAPPED) untuk handel pipanya menggunakan parameter dwFlagsAndAttributes .

Mode Write-Through

Tentukan mode write-through dengan FILE_FLAG_WRITE_THROUGH. Mode ini hanya memengaruhi operasi tulis ke pipa jenis byte antara klien pipa dan server pipa di komputer yang berbeda. Dalam mode write-through, fungsi yang menulis ke pipa bernama tidak kembali sampai data dikirimkan ke seluruh jaringan dan ke buffer pipa di komputer jarak jauh. Mode write-through berguna untuk aplikasi yang memerlukan sinkronisasi untuk setiap operasi tulis.

Jika mode write-through tidak diaktifkan, sistem meningkatkan efisiensi operasi jaringan dengan menyangga data hingga jumlah minimum byte telah terakumulasi atau sampai periode waktu maksimum berlalu. Buffering memungkinkan sistem untuk menggabungkan beberapa operasi tulis ke dalam satu transmisi jaringan. Ini berarti bahwa operasi tulis dapat berhasil diselesaikan setelah sistem menempatkan data di buffer keluar, tetapi sebelum sistem mengirimkannya ke seluruh jaringan.

Fungsi CreateFile memungkinkan klien pipa untuk mengatur mode write-through (FILE_FLAG_WRITE_THROUGH) untuk handel pipanya menggunakan parameter dwFlagsAndAttributes . Mode write-through dari handel pipa tidak dapat diubah setelah handel pipa dibuat. Mode write-through dapat berbeda untuk pegangan server dan klien ke instans pipa yang sama.

Klien pipa dapat menggunakan fungsi SetNamedPipeHandleState untuk mengontrol jumlah byte dan periode waktu habis sebelum transmisi untuk pipa di mana mode write-through dinonaktifkan. Untuk pipa baca-saja, handel pipa harus dibuka dengan hak akses GENERIC_READ dan FILE_WRITE_ATTRIBUTES.