Ich bin eher ein XS-Anfänger und ich bin dabei, ein bestehendes XS-Modul zu ändern, das eine über 15 Jahre alte zugrundeliegende C-Bibliothek stark verwendet (in der Tat ist das Modul im Grunde nur Klebstoff für diese Bibliothek). Das Problem ist, dass ich PerlIO String Tricks wie:
verwenden möchte %Vor% und übergeben Sie dann $fh
an den XS-Kleber, wo die Bibliothek FILE
erwartet. Das Problem ist, dass der XS hat:
und ich nehme an, dass es sein muss:
%Vor% Das geht natürlich nicht, da es mehr geben muss. Wenn ich den Code _parse
in der Bibliothek anschaue, endet er in:
erneut mit FILE
types. Nun muss ich mit der Grundfrage beginnen - ist das überhaupt möglich, ohne die Bibliothek zu wechseln? das heißt, kann ich Pseudo-Dateihandle aus Strings PerlIO Verhalten nur durch Ändern der XS?
Die Perl API bietet PerlIO_exportFILE()
( Implementierung ), die ein PerlIO-Handle mit einem Dateideskriptor in einen stdio FILE
-Zeiger konvertieren kann. Seit PerlIO :: Scalar ist ein "In-Memory" Dateihandle ohne Dateideskriptor kann die Konvertierung nicht erfolgreich sein. Die einzige Möglichkeit, ein PerlIO::Scalar
handle zu übergeben, wäre das Leeren einer temporären Datei. Der weniger portable Weg wäre, ein stdio zu verwenden, das Rückrufe unterstützt, wie die BSD-Implementierung, Funopen (3) .