Wie kann ich autovivifizierte Dateihandle-Argumente in einer XS-Funktion unterstützen?
Ich bin XS-Wrapping einer C-Funktion, die einen Dateideskriptor zurückgibt, und ich möchte diesen Dateideskriptor als ein Perl-Dateihandle Argument in der Art von open () . Z. B.
%Vor%Im Moment verwende ich einen Perl-Wrapper über der XS-Funktion:
%Vor%Das funktioniert Just Fine (tm), aber ich möchte auch die Implementierung komplett in XS verschieben.
Bis jetzt habe ich sv_2io
für einen Argumenttyp versucht, der als SV *
gemappt wurde, aber das eine Ausnahme für undefinierte Skalare auslöst. Ich habe nicht versucht, das erste Argument einem Objekt FILE *
oder PerlIO *
zuzuordnen, da ich nicht weiß, wie ich diese Objekte "öffnen" würde (wenn Sie so wollen).
Ich würde den myfunc()
Wrapper in Perl behalten, es funktioniert und sollte kein Flaschenhals sein.
Die erneute Implementierung von open()
ist schwierig und erfordert die Verwendung der nicht dokumentierten / internen API. Ich denke, das ist eine ziemlich enge Implementierung. newGVgen()
und do_openn()
sind Teil der öffentlichen API, aber undokumentiert und können sich ändern .
Tags und Links perl filehandle xs