我正在尝试打开其他进程stdin并使用C ++写入它,没有dup()和其他C技巧。但遗憾的是,采用字符串的fstream构造函数似乎只能从C ++ 11中获取(来源:http://www.cplusplus.com/reference/fstream/fstream/fstream/)
#include <iostream>
#include <fstream>
#include <sstream>
//using namespace std;
int main()
{
pid_t pid = fork();
if (pid == 0)
{
// std::cout << "child:" << i << std::endl;
std::string line;
std::cin.sync();
std::cout << "child got message:" << std::endl;
while ( std::getline(std::cin, line) )
{
std::cout << line << std::endl;
}
std::cout << "child done receiving" << std::endl;
}
else{
//std::cout << "parent"<<std::endl;
std::ifstream file("stdin", std::ios::in);
if(file.is_open())
{
std::string tmp, str;
std::stringstream pidstr;
pidstr << "/proc/" << pid << "/fd/0";
while ( std::getline(file, tmp) )
str += tmp + "\n";
std::fstream other( (pidstr.str().c_str()), std::ios::out);
other << str ;
}
}
return 0;
}
我有四个问题:
感谢您的理解。
编辑:使用Code:Blocks,Linux 13.04
编译并生成所需的输出EDIT2:不,显然这不会产生所需的输出。我添加了一些更改:父级等待孩子退出(这里不重要)。
但也改变了这个(在孩子身上):
while ( std::getline(std::cin, line) )
{
std::cout << line << std::endl;
}
std::cout << "child done" << std::endl;
到此:
std::getline(std::cin, line);
int lines; // this is single line sent as first from parent, containing int
std::istringstream toint(line);
toint >> lines;
std::cout << "how much lines should it read:" << lines << std::endl;
似乎孩子会在stdin上等待任何事情,然后打印出父母发送的内容。真的,有时我想知道我应该如何将C ++视为优于普通C:/