Name von Antipattern gesucht



  • hustbaer schrieb:

    Ich sehe aber keinen besonders grossen Sinn dahinter solche Commodity-Funktionen in der Kernel API (!) anzusiedeln.

    Naja. Windows hat sowieso einen Abstraktionslayer über der Kernel-API die teilweise ja nichtmal dokumentiert ist und eigentlich auch nicht vom Nutzer benutzt werden sollte.
    Kann ja gerne die Gott-Funktion geben - die darf aber in der ntdll.dll leben, in der kernel32.dll sollte ein höheres Abstraktionsniveau herrschen.

    Wird ja ansonsten auch konsequent so gemacht. Zb. soll der Nutzer doch bitte VirtualQuery (kernel32.dll) mit 3 Parametern nutzen anstatt mit NtQueryVirtualMemory (ntdll.dll) mit 6 Parametern herumzuwerkeln.



  • Dann mach mal nen konkreten Vorschlag wie du CreateFile ändern würdest, bzw. durch welche weiteren Funktionen ersetzen.
    Da is nämlich kein einziger Parameter auf den man verzeichten könnte.



  • hustbaer schrieb:

    BTW: Wie macht man unter Linux ein Kommunikationshandle zu nem Treiber bzw. Kernel-Modul auf?

    Mit open auf ein Device-File. Also z.B. open("/dev/ttyS0", flags) für die serielle Schnittstelle, aber auch open("/dev/kvm", flags) für ein Handle zum Virtualisierungssubsystem KVM.



  • Eine traurige Ausnahme sind übrigens Network-Sockets. Diese existieren nicht im normalen Namespace, was seit jeher ein Designfehler der Berkeley-Sockets war. Als das erkannt wurde, war es bereits zu spät, die Nutzung der Sockets-API zu verbreitet.

    Später designte Systeme wie Plan 9 (Bell Labs) räumten hiermit zwar auf, aber als zu Unix inkompatible Systeme hatten sie es schwer, sich durchzusetzen. Andere Ideen aus Plan 9 sind zwar zurück in moderne Unixe wie Linux und FreeBSD geflossen, die Netzwerk-API gehört aber leider nicht dazu.

    So lebt die Inkonsistenz weiter, dass Sockets und Netzwerkgeräte quasi in einer Parallelwelt existieren.



  • Dann verstehe ich nicht was an der Linux open() Variante besser sein soll bzw. überhaupt grossartig anders ist.


Anmelden zum Antworten