Aracılığıyla paylaş


Konsol Tutucuları

Konsol işlemi, konsolunun giriş ve ekran arabelleklerine erişmek için tanıtıcıları kullanır. Bir işlem, bu tanıtıcılardan birini açmak için GetStdHandle, CreateFile veya CreateConsoleScreenBuffer işlevini kullanabilir.

GetStdHandle işlevi, bir işlemle ilişkili standart giriş (STDIN), standart çıkış (STDOUT ) ve standart hata (STDERR) tanıtıcılarını almak için bir mekanizma sağlar. Konsol oluşturma sırasında sistem bu tanıtıcıları oluşturur. Başlangıçta, STDIN konsolun giriş arabelleğinin bir tanıtıcısıdır ve STDOUTSTDERR konsolun etkin ekran arabelleğinin tutamaçlarıdır. Ancak, SetStdHandle işlevi , STDOUTveya STDERRile STDINilişkili tanıtıcıyı değiştirerek standart tanıtıcıları yeniden yönlendirebilir. Üst öğe standart tanıtıcıları herhangi bir alt işlem tarafından devralındığından, sonraki GetStdHandle çağrıları yeniden yönlendirilen tanıtıcıyı döndürür. GetStdHandle tarafından döndürülen bir tanıtıcı bu nedenle konsol G/Ç dışında bir şeye başvurabilir. Örneğin, bir alt işlem oluşturmadan önce üst işlem, bir kanal tutamacını alt işlem tarafından devralınan STDIN tanıtıcı olacak şekilde ayarlamak için SetStdHandle kullanabilir. Alt işlem GetStdHandle'ı çağırdığında, boru tutamacını alır. Bu, üst işlemin alt işlemin standart tanıtıcılarını denetleyebileceği anlamına gelir. Standart tanıtıcıyı daha az erişime sahip GENERIC_READ | GENERIC_WRITE olacak şekilde ayarlamak için SetStdHandle kullanılmadığı sürece GetStdHandle tarafından döndürülen tanıtıcıların erişimi vardır.

GetStdHandle tarafından döndürülen tanıtıcıların değeri 0, 1 ve 2 olmadığından Stdio.h (STDIN, STDOUTve STDERR) içindeki standart önceden tanımlanmış akış sabitleri konsol tutamacı gerektiren işlevlerde kullanılamaz.

CreateFile işlevi, bir işlemin yeniden yönlendirilmiş olsa STDINSTDOUT bile konsolunun giriş arabelleğine ve etkin ekran arabelleğine tanıtıcı almasına olanak tanır. Konsolun giriş arabelleğine tanıtıcı açmak için CreateFile çağrısındaki değeri belirtinCONIN$. Konsolun CONOUT$ etkin ekran arabelleğine tanıtıcı açmak için CreateFile çağrısındaki değeri belirtin. CreateFile , döndürdüğü tanıtıcının okuma/yazma erişimini belirtmenizi sağlar.

CreateConsoleScreenBuffer işlevi yeni bir ekran arabelleği oluşturur ve bir tanıtıcı döndürür. Bu tanıtıcı, konsol çıkışını tanıtıcı kabul eden herhangi bir işlevde kullanılabilir. Yeni ekran arabelleği, Tutamacı SetConsoleActiveScreenBuffer işlevine yapılan bir çağrıda belirtilene kadar etkin değildir (görüntülenir). Etkin ekran arabelleğinin değiştirilmesinin GetStdHandle tarafından döndürülen tanıtıcıyı etkilemediğini unutmayın. Benzer şekilde, tanıtıcıyı STDOUT değiştirmek için SetStdHandle kullanılması etkin ekran arabelleği etkilemez.

CreateFile ve CreateConsoleScreenBuffer tarafından döndürülen konsol tanıtıcıları, konsolun giriş arabelleğine veya konsol ekranı arabelleğine tanıtıcı gerektiren herhangi bir konsol işlevinde kullanılabilir. GetStdHandle tarafından döndürülen tanıtıcılar, konsol G/Ç dışında bir şeye başvurmak üzere yeniden yönlendirilmediyse konsol işlevleri tarafından kullanılabilir. Ancak standart tanıtıcı bir dosyaya veya kanala başvurmak üzere yeniden yönlendirildiyse, tanıtıcı yalnızca ReadFile ve WriteFile işlevleri tarafından kullanılabilir. GetFileType , tanıtıcının hangi cihaz türüne başvurduğu belirlemeye yardımcı olabilir. Bir konsol tutamacı olarak FILE_TYPE_CHARsunar.

Bir işlem, özgün tanıtıcıdan farklı erişime veya devralınabilirliğe sahip yinelenen bir konsol tanıtıcısı oluşturmak için DuplicateHandle işlevini kullanabilir. Ancak, bir işlemin yalnızca kendi kullanımı için yinelenen bir konsol tanıtıcısı oluşturabileceğini unutmayın. Bu, DuplicateHandle'ın farklı bir işlem için geçerli olan bir yineleme oluşturabildiği diğer tanıtıcı türlerinden (dosya, kanal veya mutex nesneleri gibi) farklıdır. Bir konsola erişim, diğer işlemin oluşturulması sırasında paylaşılmalıdır veya AttachConsole mekanizması aracılığıyla diğer işlem tarafından istenebilir.

Konsol tutamacını kapatmak için bir işlem CloseHandle işlevini kullanabilir.