stdout
является указателем FILE *
стандартного выходного потока. dup2
ожидает файловый дескриптор, также вы перепутали порядок параметров. Вместо этого используйте
dup2(file, 1);
.
В разделе «Лучшая задача». Это плохо, потому что вы, вероятно, захотите восстановить стандартный вывод после завершения этого system
вызова. Вы можете сделать это разными способами. Вы можете dup
это где-то, а затем dup2
вернуть его (и закрыть dup
педаль один). Мне лично не нравится писать собственные cat
реализации, как это предлагается в других ответах. Если вам нужно только перенаправить одну команду оболочки с system
в файл в файловой системе, то, вероятно, самым прямым и простым способом является создание команды оболочки для этого, например
system("ls -l > Result");
Но вы должны быть осторожны, если имя файла (Результат) поступает от пользовательского ввода, поскольку пользователь может предоставить что-то вроде 'Result; rm -rf /*'
в качестве имени файла.
Также, по теме безопасности, вам следует рассмотреть возможность указания полного путь к ls
, как это предложено в комментариях:
system("/bin/ls -l > Result");