输入重定向不适用于我的程序

时间:2013-09-29 20:47:52

标签: c linux io-redirection

我正在尝试重定向程序的输入。 这是我在终端输入的命令:

./hello < name

“name”是包含单个字符串的文件。 hello是一个编译的C程序,由以下代码组成:

int main(int argc, char *argv[])
{
        char message[100] = "Hello ";
        if(argc>1)
        {
                strcat(message, argv[1]);
                strcat(message, "\n");
        }
        else
        {
                strcat(message, "there\n");
        }

        printf("%s", message);
        return 0;
}

据我所知,该论点现在应该是名称文件的内容。但是在程序中我无法检测到任何参数(并打印出“Hello there”)。

2 个答案:

答案 0 :(得分:4)

这将读取文件name并将其放在标准输入中,而不是第一个参数中。

您可以使用fgetsgetcharscanf等来阅读。

等价物:

int c;

printf("Hello ");

while((c = getchar()) != EOF) {
    putchar(c);
}

puts("\nthere");

答案 1 :(得分:0)

提供输入重定向与提供参数不同。

输入重定向意味着提供的文件将作为标准输入。

所以如果你需要文件名作为参数,那么就像这样写

  

./ hello name

但是通过查看你的程序,我会说你可能犯了一个逻辑错误。通过运行我上面提到的命令,您将获得“Hello name&#39;打印在屏幕上。您保存在名为&#39; name&#39;的文件中的实际名称。不会被打印出来。