C语言使用dup2、open、execv实现Linux标准输入重定向不生效
问题解答
根因说明
你遇到的现象和输入重定向代码逻辑无关,问题出在测试命令的固有特性上:
echo命令仅输出命令行传入的参数,完全不会读取标准输入的内容。执行/bin/echo < ./a.txt时,你的代码已经将<对应的token设置为NULL,最终传递给execv的参数列表只有[/bin/echo, NULL],没有任何待输出的参数,自然只会输出空行。sleep命令仅从命令行参数读取等待的秒数,同样不会读取标准输入的内容,参数列表只有[/bin/sleep, NULL]时必然提示缺少参数,和重定向的a.txt文件内容无关。
验证代码正确性的方法
换用默认会读取标准输入的命令测试即可,比如执行 /bin/cat < ./a.txt,如果能正常输出a.txt的完整内容,就说明你的输入重定向逻辑完全符合预期。
内容的提问来源于stack exchange,提问作者hkcode
相关产品推荐
相关产品推荐

