首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shell重定向与显式文件处理代码

Shell重定向与显式文件处理代码
EN

Stack Overflow用户
提问于 2011-05-31 07:15:29
回答 4查看 413关注 0票数 5

我不是以英语为母语的人,所以请原谅这个问题的尴尬标题。我只是不知道怎么更好地表达出来。

我在一个FreeBSD框中,我有一个用C编写的小过滤器工具,它通过stdin读取数据列表,并通过stdout输出处理后的列表。我调用它的方式有点像这样:find . -type f | myfilter > /tmp/processed.txt

现在我想给我的过滤器更多的曝光,并发表它。惯例说工具应该允许这样的东西:find . -type f | myfilter -f - -o /tmp/processed.text

这将迫使我编写根本不需要的代码,因为shell可以完成这项工作,因此我倾向于忽略它。

我的问题是:我是否错过了一些论点(除了惯例),为什么在我的代码中应该进行文件的读写,而不是委托shell重定向?

EN

回答 4

Stack Overflow用户

发布于 2011-05-31 07:27:15

这绝对没什么不对。您的过滤器将有一个类似于c++filt的接口。

如果您想要根据输入文件的名称自动选择输出文件,或者想要在单个命令中处理多个文件,则可以考虑文件处理。

如果你不想做这两件事中的任何一件,那么做一个简单的过滤器没什么错。任何人只要愿意,都可以提供一组简单的外壳包装器来提供cmd infile outfile语法。

票数 2
EN

Stack Overflow用户

发布于 2011-05-31 07:35:24

这是一个不必要的限制界面。接受命令行的参数更灵活,

代码语言:javascript
复制
grep foo file | myfilter > /tmp/processed.text

而且它也不能阻止find被使用

代码语言:javascript
复制
find . -type f -exec myfilter {} + > /tmp/processed.text
票数 1
EN

Stack Overflow用户

发布于 2011-05-31 19:40:01

实际上,要获得与shell重定向相同的效果,您可以这样做:

代码语言:javascript
复制
freopen( "filename" , "wb" , stdout );

因此,如果您在整个代码中使用了printf,输出将被重定向到文件。因此,您不需要修改以前编写的任何代码,并且可以轻松地适应约定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6184165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档