Я пишу код для перенаправления stdout в файл (например, в результате возврата ls в файл), а функция dup2 () не перенаправляет мой вывод. Вот код, который у меня есть:
void testDup()
{
int newft;
if(newfd = creat("fout.txt", O_TRUNC|O_WRONLY) == -1)
{
cout << "Open failed"<< endl;
exit(1);
}
dup2(newfd, 1);
cout << "this should be in the new file" < endl;
}
И это не работает. Я просто получаю вывод ls в окно моего терминала. Я предпринял шаги, чтобы проверить, что dup2 () действительно вернул 1, а не -1.
Вам нужна пара круглых скобок вокруг присваивания, в противном случае это присваивание логическому выражению (которое возвращает 0, если файл действительно можно открыть):
if ((newfd = creat("fout.txt", O_TRUNC | O_WRONLY)) == -1)
Других решений пока нет …