Aracılığıyla paylaş


Adlandırılmış Kanal İşlemleri

Kanal sunucusu CreateNamedPipe işlevini ilk kez çağırışında, kanalın aynı anda bulunabilecek en fazla örnek sayısını belirtmek için nMaxInstances parametresini kullanır. Sunucu, en fazla örnek sayısını aşmadığı sürece kanalın ek örneklerini oluşturmak için CreateNamedPipe tekrar tekrar çağırabilir. İşlev başarılı olursa, her çağrı adlandırılmış kanal örneğinin sunucu sonuna bir tanıtıcı döndürür.

Kanal sunucusu bir kanal örneği oluşturduğu anda, bir kanal istemcisi CreateFile veya CallNamedPipeişleviniçağırarak buna bağlanabilir. Bir kanal örneği varsa CreateFile , kanal örneğinin istemci ucuna bir tanıtıcı döndürür. Boru örneği yoksa, bir kanal istemcisi kullanılabilir duruma gelene kadar beklemek için WaitNamedPipe işlevini kullanabilir.

Kanal sunucusu, ConnectNamedPipe işlevini çağırarak kanal istemcisinin bir kanal örneğine ne zaman bağlandığını belirleyebilir. Kanal tutamacı engelleme bekleme modundaysa, ConnectNamedPipe bir istemci bağlanana kadar dönmez.

Kanal istemcileri ve sunucuları, adlandırılmış bir kanaldan okumak ve kanala yazmak için CallNamedPipeek olarak birkaç işlevden birini çağırabilir. Bu işlevlerin davranışı, boru türüne ve belirtilen boru tutamacının geçerli olduğu modlara aşağıdaki gibi bağlıdır:

  • ReadFile ve WriteFile işlevleri bayt türü veya ileti türü kanallar ile kullanılabilir.
  • ReadFileEx ve WriteFileEx işlevleri, kanal tutamacı çakışan işlemler için açılmışsa bayt türü veya ileti türü kanallarla kullanılabilir.
  • PeekNamedPipe işlevi, bayt türündeki bir kanalın veya ileti türü kanalının içeriği kaldırılmadan okumak için kullanılabilir. PeekNamedPipe kanal örneği hakkında ek bilgiler de döndürebilir.
  • TransactNamedPipe işlevi, çağırma işleminin kanal tutamacı ileti okuma moduna ayarlandıysa ileti türü çift yönlü kanallar ile kullanılabilir. İşlev bir istek iletisi yazar ve tek bir işlemde bir yanıt iletisi okuyarak ağ performansını geliştirir.

Kanal istemcisi başlatılana kadar kanal sunucusu engelleme okuma işlemi gerçekleştirmemelidir. Aksi takdirde, bir yarış durumu oluşabilir. Bu genellikle C çalışma zamanı kitaplığı gibi başlatma kodunun devralınan tanıtıcıları kilitlemesi ve incelemesi gerektiğinde oluşur.

bir istemci ve sunucu kanal örneğini kullanmayı bitirdiğinde, sunucu ilk olarak FlushFileBuffers işlevini çağırarak kanala yazılan tüm baytların veya iletilerin istemci tarafından okunduğundan emin olmalıdır. FlushFileBuffers istemci kanaldan tüm verileri okuyana kadar döndürülmüyor. Ardından sunucu, kanal istemcisine bağlantıyı kapatmak için DisconnectNamedPipe işlevini çağırır. Bu işlev, henüz kapatılmadıysa istemcinin tutamacını geçersiz kılar. Kanaldaki okunmamış veriler atılır. İstemcinin bağlantısı kesildikten sonra sunucu, CloseHandle işlevini çağırarak tutamacını kanal örneğine kapatır. Alternatif olarak, sunucu ConnectNamedPipe kullanarak yeni bir istemcinin borunun bu örneğine bağlanmasını sağlayabilir.

İşlem, kanal türünü, giriş ve çıkış arabelleklerinin boyutunu ve oluşturulabilecek en fazla kanal örneği sayısını döndüren GetNamedPipeInfo işlevini çağırarak adlandırılmış kanal hakkındaki bilgileri alabilir. GetNamedPipeHandleState işlevi, kanal tutamacının okuma ve bekleme modlarını, geçerli kanal örneği sayısını ve ağ üzerinden iletişim kuran kanallar için ek bilgileri raporlar. SetNamedPipeHandleState işlevi, kanal tutamacının okuma modunu ve bekleme modlarını ayarlar. Uzak sunucuyla iletişimde bulunan kanal istemcileri için, işlev ayrıca bir iletiyi iletmeden önce toplanması gereken maksimum bayt sayısını veya beklenmesi gereken en uzun süreyi de denetler (istemcinin tanıtıcısının yazma modu etkin olarak açılmadığı varsayılır).