【发布时间】:2023-04-01 03:32:02
【问题描述】:
我有一个非常简单的程序:
void main()
{
fgets(buf,133,stdin);
printf( buf);
system("/bin/dash");
}
当我启动程序时,一切正常,我可以输入我想要的任何内容,然后我就有了一个 shell。但是,如果我这样做了
$ echo 'blabla' | ./test
为了自动填充 buf(无需使用键盘输入任何内容),shell 会被执行,但 /bin/ls 可以正常工作。 (显然显示命令工作正常)
如果我删除 fgets 行,并执行相同的命令,它可以工作,但将 'blabla' 作为 /bin/dash 的参数。但是,添加一个 nul 字符或返回 '\xd' 以模拟我的键盘在 fgets 中的返回不起作用
我想了解当我使用“|”时会发生什么我的 C++ 程序中的符号。我认为这是无需任何人工交互即可自动填充 scanfs 和 fgets 的解决方案,是我做错了还是有其他解决方案?
谢谢。
Debian,C++ g++
【问题讨论】:
-
在标准 C++ 中 main 总是返回一个
int -
void main()错误 -
你的cmets安静没用
-
关于XY问题的评论其实很有用。我很难回答,因为我不确定您的目标是什么,所以我不知道您在问题中指的是哪种“解决方案”。相反,我只是回答了您的第一个问题,即使用管道时究竟会发生什么。最好先确切地说出您想要完成的问题,然后描述您尝试过的内容以及尝试中遇到的问题。