是否有可能将数据写入Linux中自己的标准输入(Is it possible to write da

2019-07-30 01:28发布

我想调试我的CGI脚本IDE(C ++),所以我想创造一个“调试模式”:从磁盘中读取文件,将其推到自己的标准输入,设置一些环境变量,对应此文件,并运行其他地区脚本,因为它是由Web服务器调用。 是否有可能,如果是的话,我该怎么办呢?

Answer 1:

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

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


Answer 2:

大家都知道,标准输入被定义为文件描述符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来表示输入和退出程序的结束。



文章来源: Is it possible to write data into own stdin in Linux
标签: c++ linux cgi