這裏是你如何改變每個原始文件/ C緩衝文件/ C++緩衝流:
#include <unistd.h>
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int main() {
// unbuffered system-call level write() access:
::fclose(stderr);
if (::dup2(STDOUT_FILENO, STDERR_FILENO) == -1) {
cout << "dup2() failed!" << endl;
return -1;
}
char msg_err[] = "write(STDERR_FILENO) OK.\n";
char msg_out[] = "write(STDOUT_FILENO) still OK.\n";
write(STDERR_FILENO, msg_err, strlen(msg_err));
write(STDOUT_FILENO, msg_out, strlen(msg_out));
// buffered C-style access: (ordering may be weird w/o fflush())
stderr = ::fdopen(STDOUT_FILENO, "a");
fprintf(stderr, "fprintf(stderr) OK.\n");
fprintf(stdout, "fprintf(stdout) still OK.\n");
// buffered C++ access:
std::cerr.rdbuf(std::cout.rdbuf());
cerr << "cerr << OK.\n";
cout << "cout << still OK.\n";
}
儘管如此,它仍然是更好地從調用shell這樣做。
當您使用'>> file.log 2>&1'運行它時,您可能會重定向它「 –
」未按預期工作。這裏沒有有用的信息。你在觀察什麼?你期望觀察什麼? –
什麼不按預期工作。 ''無法重定向控制檯日誌\ n「;'只有打開文件失敗時纔會打印。 嘗試在if塊之後添加行以檢查文件是否已正確打開。 – Singh