std :: cout 평가 순서에 대해 몇 가지 질문을했는데 std :: cout 인수 사이에 시퀀스 포인트가 없다는 것을 알고 있지만 이해할 수는 없습니다. 다음과 같은 코드가 작동하는 방법 :C++과 함수 호출 사이의 평가 순서
saved_fd = dup(STDOUT_FILENO);
std::cout << "Redirecting std out to /dev/null";
redirect_stdout()
<do some stuff>
std::cout << "Restoring std out back to standard output";
restore_stdout();
내 기능 redirect_stdout()와 restore_stdout를()를 dup2가 호출을 사용하여는/dev/null로 표준 출력을 리디렉션하고 나중에 다시 복원합니다. 화면에 나타나는 유일한 출력은 "std out to/dev/null"입니다. 하지만 내가 보는 것은 "표준 출력으로 표준 출력 복원"입니다.
redirect_stdout()이 이전 명령문보다 먼저 실행되는 것으로 보입니다.
그냥 완성도, 여기에 두 가지 방법의 정의는 다음과 같습니다
void redirect_stdout()
{
dump_fd = open("/dev/null", O_RDWR, 0777);
dup2(dump_fd, STDOUT_FILENO);
cout << endl;
}
void restore_stdout()
{
dup2(saved_fd, STDOUT_FILENO);
cout << endl;
}
왜 내가 처음 COUT 출력이 표시되지 않는 이유는 무엇입니까?
내 수정 구슬은 당신 때문에 있다고 말한다 :
수정 프로그램은 출력을 플러시하는 것입니다 리디렉션 전에 플러시하지 마십시오. '<< std :: flush'를 시도하십시오. – HolyBlackCat
표준'iostreams' 기반 클래스는 내부적으로 많은 버퍼링을 사용합니다. 나는 그것들을 씻어내는 것만으로 충분하지 않거나 항상 정의되지 않는다면 나는 모르지만 그것은 내가 시작할 곳이다. –