Crystal C 绑定:使用 fopen

Crystal C bindings: using fopen

我需要对库使用 fopen。 这是正确的方法吗? fopen 已经在某处定义了吗? (这在 LibC IMO 中很有用)

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

它工作正常,我想知道定义它的最佳方式。

不用C,直接用Crystal:

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

如果您需要访问文件描述符,您可以调用 file.fd

只是一个可能有用的小改进(这是我在绑定中使用的当前解决方案):

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