Hallo,
Wo hab ich geschrieben das ich Vererbung "grundsätzlich und ohne Ausnahme" verbieten will?
Ich nehme an Du meinst nur Dateien?
Dateien sollen bei mir nicht geshared werden aber gegen Vererben im Sinne von Weitergeben hab ich nichts einzuwenden, die Frage ist eher wie das zu implementieren ist. Ich könnte mir vorstellen dafür ein Flag "FD_CLOFORK" (was sich auf den Elternprozess bezieht) in der libc einzuführen (zumindest in der BAD-POSIX-Version), wenn der Versuch eine Datei ohne dieses Flag zu vererben zu einem Fehler führt kann man den Source-Code des Programms analysieren und einfach fixen. Da viele Programme kein allumfassendes Fehlerhandling haben wäre es hier geschickt wenn die libc interne Fehler mit einem gesondertem Mechanismus loggen kann.
Ich will doch gar keine echte POSIX-Konformität erreichen (ist für mein eigenes Projekt eh unrealistisch), alles was ich will ist das man möglichst viele existierende Programme mit möglichst wenig Aufwand portieren kann (und das am besten ohne das man sich merkwürdige Effekte einhandelt).
Aus Gründen der Performance finde ich es besser wenn z.B. der Datei-Pointer nicht im VFS sondern in der libc ist (deswegen hab ich das Thema ja eigentlich erst hier angesprochen). Damit bekommt man aber eben Probleme beim POSIX-Konformen Vererben von Dateien. Mein Vorschlag ist nichts weiter als eine Variante damit umzugehen und trotzdem möglichst viele existierende Programme möglichst ohne Änderungen lauffähig zu halten. Der Grund warum ich glaube dass das auch funktioniert ist der das es kaum echte Szenarien gibt in denen echte Dateien vererbt werden (die paar Ausnahmen die es sicher gibt werden die Datei auch nicht sharen sondern eher nur weitergeben was natürlich auch mit möglichst wenig Portierungsaufwand machbar sein soll) so das es IMHO reicht wenn man richtiges Vererben nur mit Streams kann.
Grüße
Erik