2015-09-09 2 views
5

Ich habe schon früher in Rust mit dem Schreiben von Bibliotheksbindungen gespielt, und das war nicht schwer. Nun aber stecke ich fest: Ich versuche, eine Bindung für librsync zu schreiben, und einige seiner Funktionen erwarten, dass Sie eine offene Datei übergeben übergeben (a FILE* in C).Wie kann ich eine Bindung an eine C-Funktion schreiben, die eine offene Dateikennung in Rust erwartet?

Für primitive Typen gibt es eine einfache Möglichkeit, sie in C zu übergeben (dasselbe gilt für Zeiger auf primitive Typen). Und, um klar zu sein, ich bin mir bewusst, dass die libc Kiste implementiert , die wiederum gibt mir eine mut FILE* (die würde schließlich den Job tun). Allerdings habe ich mich gefragt, ob es etwas in der Rust-Standard-Bibliothek gibt, die mir eine FILE* gibt, um an zu übergeben - vielleicht etwas analog zu std::ffi::CString.

+2

Was ist der Grund, warum Sie die Avenue, die Sie bereits kennen, nicht verwenden möchten? Sie müssen uns das sagen, damit keine Antworten aus demselben Grund automatisch ausfallen. – Shepmaster

+1

Meistens fehlen Kenntnisse mit Rust, Shepmaster. Ich möchte nicht zu einer Lösung eilen, die sich der Alternativen nicht bewusst ist. – dodecaphonic

+0

Es ist unklar, worum es hier geht, was wiederum die Frage zu weit macht Ich fürchte: Willst du vermeiden, '* mut FILE' direkt zu manipulieren? oder was? –

Antwort

1

Sie könnten natürlich eine RawFd verwenden, umwandeln und libc::funcs::posix88::stdio::fdopen(_, mode) damit aufrufen. Das wäre jedoch höchst unportabel.

Verwandte Themen