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.