2016-12-18 2 views
1

Ich brauche fopen für eine Bibliothek. Ist das der richtige Ansatz? Ist fopen schon irgendwo definiert?Crystal C Bindungen: mit fopen

@[Link("c")] 
lib LibStd 
    type File = Void* 
    fun fopen(LibC::Char*, LibC::Char*): File 
    fun fclose(File) 
end 

(wäre es in LibC IMO nützlich sein) Es funktioniert gut, ich mag den besten Weg, wissen, es zu definieren.

Antwort

1

Nur eine geringfügige Verbesserung, die nützlich sein könnte (dies ist die aktuelle Lösung, die ich in meinen Bindungen bin mit):

@[Link("c")] 
lib LibStd 
    type File = Void 
    fun fopen(filename : LibC::Char*, mode : LibC::Char*): File* 
    fun fclose(stream : File*) 
end 
0

Dont mit C. Mühe Verwenden Sie einfach Glas:

File.open(path) { |file| ... }

Wenn Sie jemals den Dateideskriptor zugreifen müssen, Sie file.fd nennen können.

+0

Die C-Bibliothek, die ich verwende FILE erfordert * keinen Dateideskriptors – Mat

+0

Was ist die Bibliothek? Hat es keine andere Möglichkeit, einen Pfad direkt zu übergeben? –

+0

Eine Verkäufer-Lib (V4L like) eines Framegrabber-Geräts. Ich mache ein paar Experimente :) – Mat