Vala 中的文件 input/output(IOChannel 与 FileStream 与 IOStream)
file input/output in Vala (IOChannel vs FileStream vs IOStream)
我有几个 fd(从 Process.spawn_async_with_pipes
获得)要读取和写入。现在我看到有多种方法可以这样做:
- 使用
IOChannel.unix_new
- 使用
FileStream.fdopen
- 使用
UnixInputStream
和 UnixOutputStream
这些 API 之间有什么区别,我应该使用哪一个?
IOChannel
- Part of GLib
- 对使用文件、管道和套接字的便携式支持
文件流
- 不是 GLib/GIO 的一部分
- 绑定到标准 C 库 (libc) fopen、fclose、fwrite 等
UnixInputStream / UnixOutputStream
- Part of GIO(准确的说是gio-unix,据我所知是Unix)
- 支持 InputStream 和 OutputStream 接口
- 适合不同类型流的抽象
- GIO
中还有处理Windows文件句柄的Win32InputStream和Win32OutputStream
所以使用哪一个取决于几个因素:
- 您需要非 Unix 支持吗?
- 您想使用 GIO 抽象接口吗?
- 您需要使用 FILE*
- 您需要使用 Windows 文件句柄
我有几个 fd(从 Process.spawn_async_with_pipes
获得)要读取和写入。现在我看到有多种方法可以这样做:
- 使用
IOChannel.unix_new
- 使用
FileStream.fdopen
- 使用
UnixInputStream
和UnixOutputStream
这些 API 之间有什么区别,我应该使用哪一个?
IOChannel
- Part of GLib
- 对使用文件、管道和套接字的便携式支持
文件流
- 不是 GLib/GIO 的一部分
- 绑定到标准 C 库 (libc) fopen、fclose、fwrite 等
UnixInputStream / UnixOutputStream
- Part of GIO(准确的说是gio-unix,据我所知是Unix)
- 支持 InputStream 和 OutputStream 接口
- 适合不同类型流的抽象
- GIO 中还有处理Windows文件句柄的Win32InputStream和Win32OutputStream
所以使用哪一个取决于几个因素:
- 您需要非 Unix 支持吗?
- 您想使用 GIO 抽象接口吗?
- 您需要使用 FILE*
- 您需要使用 Windows 文件句柄