是否有可能在Linux中将数据写入到自己的stdin中

我想从IDE中debugging我的cgi脚本(C ++),所以我想创build一个“debugging模式”:从磁盘读取文件,把它推到自己的stdin,设置一些环境variables,对应这个文件,运行其余的该脚本是由Web服务器调用的。 是否可能,如果是,那我该怎么做?

Solutions Collecting From Web of "是否有可能在Linux中将数据写入到自己的stdin中"

你不能“推送自己的标准输入”,但你可以重定向文件到你自己的标准输入。

freopen("myfile.txt","r",stdin); 

大家都知道标准输入是一个定义为STDIN_FILENO文件描述符。 虽然它的价值不能保证是0 ,但我从来没有看到别的。 无论如何,没有什么能够阻止你写入文件描述符。 为了举例,这里是一个小程序,它写10个消息到自己的标准输入:

 #include <unistd.h> #include <string> #include <sstream> #include <iostream> #include <thread> int main() { std::thread mess_with_stdin([] () { for (int i = 0; i < 10; ++i) { std::stringstream msg; msg << "Self-message #" << i << ": Hello! How do you like that!?\n"; auto s = msg.str(); write(STDIN_FILENO, s.c_str(), s.size()); usleep(1000); } }); std::string str; while (getline(std::cin, str)) std::cout << "String: " << str << std::endl; mess_with_stdin.join(); } 

保存到test.cpp ,编译并运行:

 $ g++ -std=c++0x -Wall -o test ./test.cpp -lpthread $ ./test Self-message #0: Hello! How do you like that!? Self-message #1: Hello! How do you like that!? Self-message #2: Hello! How do you like that!? Self-message #3: Hello! How do you like that!? Self-message #4: Hello! How do you like that!? Self-message #5: Hello! How do you like that!? Self-message #6: Hello! How do you like that!? Self-message #7: Hello! How do you like that!? Self-message #8: Hello! How do you like that!? Self-message #9: Hello! How do you like that!? hello? String: hello? $ 

“你好?” 部分是我发送完10条消息后输入的内容。 然后按Ctrl + D来指示输入结束和程序结束。