원격 쉘 역할을하는 데몬을 작성하고 싶습니다. 따라서 stdin, stdout 및 stderr를 닫아야합니다.C++ 제대로 종료 됨
이제 어떻게 이것이 제대로 이루어 졌는지 알고 싶습니다.
std::streambuf * old = std::cout.rdbuf(mStdOut.rdbuf());
std::cout << "Bla" << std::endl;
std::string text = mStdOut.str();
이제 작동하고 스트림이 리디렉션됩니다. 그러나 '늙은'의 의미는 무엇입니까? 이것은 오래된 버퍼가 아니므로 삭제해야합니까? 포인터 자체가 NULL이 아니더라도 삭제하려고하면 null 포인터 예외가 발생합니다. 그러면 어떻게 제거 할 수 있습니까? 아니면 무시할 수 있습니까? 그것을 무시한다면, 데몬이 터미널에서 적절히 분리되어 있습니까?
stderr과 stdin도 동일하지만 치료법은 같을 것이라고 가정합니다.
. 대답은'cin' /'cout' /'cerr'을 통해 수행 될 수 없지만 기본 POSIX 파일 핸들에 대해 수행되어야한다는 것입니다. –
그래, 질문에 두 부분이 있습니다. C++과'cout' 부분에 응답했습니다 - 스트림 버퍼를 삭제하지 마십시오. –