我试图让我的程序输出我输入到命令行的所有内容但是我传输到它的文件没有打印出来,因为它没有存储在argv中。这是我执行的方式:
输入:
./program < file.txt
预期产量:
./program < file.txt
实际输出:
./program
为了清楚起见我不想打印出文件中的内容。我只想打印出文件的名称。
答案 0 :(得分:2)
文件重定向由shell处理,而不是由程序处理。当shell看到&#34;&lt;&#34;它基本上说&#34;当你启动这个程序时,将stdin映射到这个文件而不是终端&#34;。所以,在引擎盖下,shell执行fork();然后在它的位置关闭并打开文件,然后调用execv()或类似的实际执行程序。类似地,如果你执行./program * .txt,那么当程序看到命令行时,* .txt已经扩展到目录中的所有匹配文件名。
答案 1 :(得分:0)
我怀疑,它是一个数据流,文件名没有流式传输到程序 此外,我不认为你应该在argv中查找输入,你应该从stdin读取流内容,例如使用scanf&#39;