Megosztás:


Konzolfogópontok

A konzolfolyamatok leírókkal férnek hozzá a konzol bemeneti és képernyőpuffereihez. A folyamat a GetStdHandle, a CreateFile vagy a CreateConsoleScreenBuffer függvénnyel nyithatja meg az egyik leírót.

A GetStdHandle függvény egy mechanizmust biztosít a folyamathoz társított standard bemenet (STDIN), standard kimenet (STDOUT) és standard hibakezelő (STDERR) lekéréséhez. A konzol létrehozása során a rendszer létrehozza ezeket a fogópontokat. Kezdetben STDIN a konzol bemeneti pufferének leírója, és STDOUTSTDERR a konzol aktív képernyőpufferének fogópontjai. A SetStdHandle függvény azonban átirányíthatja a standard fogópontokat az STDIN, STDOUTvagy STDERR. Mivel a szülő szabványos fogópontjait bármely gyermekfolyamat örökli, a GetStdHandle későbbi hívásai visszaadják az átirányított leírót. A GetStdHandle által visszaadott fogópont ezért a konzol I/O-ján kívül másra is hivatkozhat. Gyermekfolyamat létrehozása előtt például a szülőfolyamat a SetStdHandle használatával állíthat be egy csőfogópontot a STDIN gyermekfolyamat által öröklő fogópontként. Amikor a gyermekfolyamat meghívja a GetStdHandle-t, lekéri a csőfogópontot. Ez azt jelenti, hogy a szülőfolyamat szabályozhatja a gyermekfolyamat szabványos fogópontjait. A GetStdHandle által visszaadott fogópontok csak akkor férhetnek GENERIC_READ | GENERIC_WRITE hozzá, ha a SetStdHandle-t arra használták, hogy a standard leírót alacsonyabb hozzáférésűre állítsa.

A GetStdHandle által visszaadott fogópontok értéke nem 0, 1 és 2, ezért az Stdio.h standard előre definiált streamállandói (STDINSTDOUTés STDERR) nem használhatók konzolfogópontot igénylő függvényekben.

A CreateFile függvény lehetővé teszi, hogy a folyamat a konzol bemeneti pufferéhez és aktív képernyőpufferéhez is lekérjen egy leírót, még akkor is, ha STDIN átirányították és STDOUT átirányították. Ha meg szeretne nyitni egy fogópontot a konzol bemeneti pufferében, adja meg a CONIN$CreateFile hívásának értékét. Adja meg a CONOUT$CreateFile hívásában szereplő értéket egy fogópont megnyitásához a konzol aktív képernyőpufferében. A CreateFile lehetővé teszi a visszaadott leíró olvasási/írási hozzáférésének megadását.

A CreateConsoleScreenBuffer függvény létrehoz egy új képernyőpuffert, és visszaad egy leírót. Ez a fogópont bármely olyan függvényben használható, amely elfogad egy leírót a konzol kimenetéhez. Az új képernyőpuffer nem aktív (megjelenik), amíg a leírója meg nem jelenik a SetConsoleActiveScreenBuffer függvény hívásában. Vegye figyelembe, hogy az aktív képernyőpuffer módosítása nem befolyásolja a GetStdHandle által visszaadott leírót. Hasonlóképpen, a SetStdHandle használata a STDOUT fogópont módosításához nincs hatással az aktív képernyőpufferre.

A CreateFile és a CreateConsoleScreenBuffer által visszaadott konzolfogópontok bármely olyan konzolfüggvényben használhatók, amelyek a konzol bemeneti pufferéhez vagy a konzol képernyőpufferéhez leírót igényelnek. A GetStdHandle által visszaadott fogópontokat a konzolfüggvények használhatják, ha nem átirányították őket, hogy a konzol I/O-ján kívül másra hivatkozzon. Ha a rendszer átirányított egy szabványos fogópontot, amely fájlra vagy csőre hivatkozik, a leírót azonban csak a ReadFile és a WriteFile függvény használhatja. A GetFileType segíthet annak meghatározásában, hogy a leíró milyen eszköztípusra hivatkozik. A konzolfogópont a következőképpen jelenik FILE_TYPE_CHARmeg: .

A folyamatok a DuplicateHandle függvénnyel létrehozhatnak egy duplikált konzolfogópontot, amely az eredeti leírótól eltérő hozzáféréssel vagy öröklődéssel rendelkezik. Vegye figyelembe azonban, hogy egy folyamat csak saját használatra hozhat létre duplikált konzolkezelőt. Ez eltér más leírótípusoktól (például fájl-, cső- vagy mutexobjektumoktól), amelyekhez a DuplicateHandle létrehozhat egy másik folyamathoz érvényes duplikátumot. A konzolhoz való hozzáférést meg kell osztani a másik folyamat létrehozásakor , vagy a másik folyamat kérheti az AttachConsole mechanizmuson keresztül.

Egy konzolfogópont bezárásához egy folyamat használhatja a CloseHandle függvényt.