如果stdin是文件

时间:2016-10-22 08:22:51

标签: c posix stdin io-redirection argv

我是C的小新手。

./main 7 4

终端中的此命令导致argv [1] = 7,argv [2] = 4。

./main <input.in

当我在终端中使用stdin的重定向时,它只显示argc = 1(./ main)。

有什么方法可以解决这个问题,还是我必须尝试不同的方式?

2 个答案:

答案 0 :(得分:2)

你shell将<file.txt解释为“将file.txt的内容发送到此进程'stdin”,因此你的程序永远不会看到<file.txt部分。

没有办法解决这个问题,因为这是POSIX(可能还有其他)shell的故意特征。

答案 1 :(得分:0)

我们因为你在Ubuntu并使用终端,我会假设你正在使用bash。您遇到的问题不是真正的问题,而是bash如何启动您的程序。

终端挂钩p ./program [args, ...] < redirected,bash调用exec函数内部启动程序,并为您的程序设置环境。它使用[]之间的任何args设置你的程序,但之后包括“&lt;”重定向符号。它不作为参数呈现给您的程序,但它将它与标准输入挂钩。

所以,如果你想用它做点什么,你可以这样做:

#include <stdio.h>
int mychar = getchar(stdin).

因为FILE* stdin;已经打开了。否则stdin文件将接受来自键盘的输入,但现在将从文件中读取。您不仅限于getchar,您可以从stdio.h中获取许多带有FILE *并使用它的c函数。