我正在尝试实施more
命令。我想知道如果有管道我怎么能理解。例如,如果我从shell中键入
cat file1 file2 | more
如何在更多的实现中处理?
more
的实现是否可用作开源?
实际上我无法读取stdin。我已经管理了更多的file.txt而不是cat文件更多..
我想我应该先从用户那里读取并放一个缓冲区而不是打印缓冲区。我的代码包含:
if(argc == 1)
{
fgets(line, 255, 0);
printf("%s", line);
}
但它会出错。
答案 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)