Eine alte Bibliothek mit Perl XS und PerlIO arbeiten lassen

8

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:

%Vor%

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:

%Vor%

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?

    
PLK 05.06.2013, 08:59
quelle

1 Antwort

3

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) .

    
chansen 09.06.2013, 20:57
quelle

Tags und Links