【发布时间】:2015-09-18 23:27:52
【问题描述】:
是否可以将 HDF5 写入标准输出并从标准输入读取(通过H5::File file("/dev/stdout",H5F_ACC_RDONLY) 或其他方式)?
我想要的是让一个程序 foo 写入 HDF5 文件(例如,作为它的第一个参数)和另一个程序 bar 从 HDF5 文件中读取,然后代替
command_prompt> foo temp.h5
command_prompt> bar temp.h5
command_prompt> rm temp.h5
简单地说
command_prompt> foo - | bar -
程序foo 和bar 将特殊文件名- 分别理解为stdout 和stdin。为了编写这些程序,我想知道 1)这是否可能以及 2)我如何实现它,即分别传递给 H5Fcreate() 和 H5Fopen() 的内容,以防文件名 = - .
我试过了,这似乎是不可能的(不是一个大惊喜)。 HDF5 只有H5Fcreate()、H5Fopen() 和H5Freopen(),它们似乎都不支持对stdin/stdout 的I/O。
【问题讨论】:
-
当然可以。 HDF5 只是一个数据源,与其他任何数据源一样。
-
@HighPerformanceMark ??所以呢?我认为这与我的问题无关。为了您的利益,我澄清了一点。
-
我对您支持流媒体的尝试表示敬意——这非常有用。 如果您的 HDF5 库支持流式传输,它可能会提供类似
H5Ffdopen()的东西,让您可以传递已经打开的 fd 或 FILE *。另一方面,如果他们只给你H5Fopen,很可能他们不支持它,并且很可能使用像/dev/stdin这样的特殊文件名将不起作用。如果他们不支持,很可能是因为,正如另一个答案所指出的,他们希望能够在阅读或写作时四处寻找。 -
@RobertHarvey 不幸的是,这是错误的。 HDF5 是数据源,但不是流。
-
@Walter:只要有足够的编程工作量,任何数据源都可以转换为流。它可能缺少某些功能,您可能必须将输入限制在数据的特定部分,但这样做当然是可能的。
标签: hdf5