如何将文件读入命令行?

时间:2014-01-21 00:39:11

标签: c file file-io command-line

基本上我想要的是有一个带有int main(argc,* argv [])的程序,而不是将chars写入命令行,我想让我的程序从文件中读取这些单词。我怎么能做到这一点? Linux中是否有特殊命令?

5 个答案:

答案 0 :(得分:2)

您可以在* nix shell中使用标准重定向操作来传输文件作为输入:

./myprogram < inputfile.txt

此语句执行您的程序(myprogram)并将inputfile.txt内的 数据泵送到您的程序

您还可以以类似的方式将程序输出重定向到文件:

./myprogram > outputfile.txt

答案 1 :(得分:1)

使用重定向

yourprogram < youtextfile

yourtextfile的内容作为标准输入(stdin)提供给您的程序。同样

yourprogram > yourothertextfile

会将程序写入标准输出(stdout)的所有内容发送到yourothertextfile

在阅读手册页时,您会注意到大多数系统调用都有直接使用stdin或stdout的版本

例如,考虑printf系列:

printf ("hello world\n");

的缩短版
fprintf (stdout,"hello world\n");

同样适用于scanf和stdin。

这只是重定向的最基本用法,在我看来,这是“unix做事方式”的关键方面之一。因此,您会发现许多文章和教程显示的示例比我在此处写的更先进。在重定向上查看this Linux Documentation Project page以开始使用。

编辑:通过重定向获取馈送输入ior交互式“看起来”与程序相同,因此它将对重定向输入做出与对控制台输入相同的反应。这意味着如果您的程序期望数据按行(例如,因为它使用gets()来读取行),则输入文本文件应按行排列。

答案 2 :(得分:1)

而不是做

for(int i = 1; i < argc; i++)
{
    insert(&trie, argv[i]);
}
你可以做点什么

FILE *input;
char *line;

....

while (fscanf(input, "%ms", &line) != EOF) {
    insert(&trie, line);
        /* If you make a copy of line in `insert()`, you should
         * free `line` at here; if you do not, free it later. */
        free(line);
}

答案 3 :(得分:0)

默认情况下,您在POSIX兼容系统上执行的每个程序都打开了三个文件描述符(请参阅<unistd.h>了解宏的定义):标准输入(STDOUT_FILENO),标准输出({ {1}})和错误输出(STDOUT_FILENO),它与控制台绑定。

既然你说你想要读取行,我相信STDERR_FILENO函数可以完成这项工作。它需要ssize_t getline(char **lineptr, size_t *n, FILE *stream)指针)作为第三个参数,因此您必须使用FILE打开文件,或fopen(3)和{的组合{1}}。

open(2)获取灵感,这是一个展示你想要的程序:

fdopen(3)

没有参数,这个程序从标准输入读取行:你可以输入像man 3 getline这样的行或直接执行它并从那里写入你的输入(用^ D结束)。

以文件作为参数,它将输出文件中的每一行,然后退出。

答案 4 :(得分:0)

您可以让您的可执行文件在命令行中读取其参数,并使用xargs,这是一个特殊的Linux命令,用于将文件内容作为参数传递给命令。

xargs的替代方法是parallel

相关问题