gpt4 book ai didi

c++ - 当我使用 '|' 或 '<' 时到底发生了什么,c++

转载 作者:IT王子 更新时间:2023-10-29 01:05:36 26 4
gpt4 key购买 nike

我有一个非常简单的程序:

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++

最佳答案

当你执行echo 'blabla' | ./test 在您的 shell 中,shell 将启动一个 echo 进程并将其标准输出管道连接到 ./test 的标准输入管道。这与 C++ 无关:这些管道是大多数操作系统的一个特性,几乎每个进程都有它们。

当您的程序执行 system 时,您正在创建一个(或多个)连接到相同标准输入管道的新进程。因此,如果该管道中有一些数据(来自 echo 命令)尚未被 test 读取,则您启动的进程将可以读取这些数据系统

使用 echo 和管道是一种向 fgetsscanf 提供输入的好方法。将数据传递给程序的另一种方法是使用环境变量或命令行参数,但您需要修改代码以检查这些内容。

关于c++ - 当我使用 '|' 或 '<' 时到底发生了什么,c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32336522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com