实现“更多”Unix实用程序命令

时间:2012-03-24 18:20:18

标签: unix utility

我正在尝试实施more命令。我想知道如果有管道我怎么能理解。例如,如果我从shell中键入

cat file1 file2 | more

如何在更多的实现中处理?

more的实现是否可用作开源?

实际上我无法读取stdin。我已经管理了更多的file.txt而不是cat文件更多..

我想我应该先从用户那里读取并放一个缓冲区而不是打印缓冲区。我的代码包含:

if(argc == 1)
{
  fgets(line, 255, 0);
   printf("%s", line);
} 

但它会出错。

2 个答案:

答案 0 :(得分:4)

语法越多

more [options] [file_name]

如果您不提供文件名,更多命令将从 stdin 获取输入;您可以使用管道提供此输入(通过 stdin ),例如:

cat file.txt | more

这会将cat命令的输出发送到更多。这与做:

相同
more file.txt

您无需具体了解是否有管道;你只需要检查文件名是否作为参数传递给更多。如果是,则输入被视为文件的内容。如果不是,则认为输入源自 stdin

至于源代码,一些谷歌搜索将带你走很长的路。以下是FreeBSD的一些旧源代码:

http://svnweb.freebsd.org/base/stable/2.0.5/usr.bin/more/

或者来自Ubuntu存储库的更多来源:

http://bazaar.launchpad.net/~vcs-imports/util-linux-ng/trunk/files/head:/text-utils/

答案 1 :(得分:0)

建议你首先检查argc是否等于1,如果等于1,你应该使用stdin作为输入文件句柄,这样你的程序就可以处理cat file.txt |更