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