我不是以英语为母语的人,所以请原谅这个问题的尴尬标题。我只是不知道怎么更好地表达出来。
我在一个FreeBSD框中,我有一个用C编写的小过滤器工具,它通过stdin读取数据列表,并通过stdout输出处理后的列表。我调用它的方式有点像这样:find . -type f | myfilter > /tmp/processed.txt。
现在我想给我的过滤器更多的曝光,并发表它。惯例说工具应该允许这样的东西:find . -type f | myfilter -f - -o /tmp/processed.text
这将迫使我编写根本不需要的代码,因为shell可以完成这项工作,因此我倾向于忽略它。
我的问题是:我是否错过了一些论点(除了惯例),为什么在我的代码中应该进行文件的读写,而不是委托shell重定向?
发布于 2011-05-31 07:27:15
这绝对没什么不对。您的过滤器将有一个类似于c++filt的接口。
如果您想要根据输入文件的名称自动选择输出文件,或者想要在单个命令中处理多个文件,则可以考虑文件处理。
如果你不想做这两件事中的任何一件,那么做一个简单的过滤器没什么错。任何人只要愿意,都可以提供一组简单的外壳包装器来提供cmd infile outfile语法。
发布于 2011-05-31 07:35:24
这是一个不必要的限制界面。接受命令行的参数更灵活,
grep foo file | myfilter > /tmp/processed.text而且它也不能阻止find被使用
find . -type f -exec myfilter {} + > /tmp/processed.text发布于 2011-05-31 19:40:01
实际上,要获得与shell重定向相同的效果,您可以这样做:
freopen( "filename" , "wb" , stdout );因此,如果您在整个代码中使用了printf,输出将被重定向到文件。因此,您不需要修改以前编写的任何代码,并且可以轻松地适应约定。
https://stackoverflow.com/questions/6184165
复制相似问题