Как создать проект в консоли разработчиков Google

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");
13
задан H. Ferrence 25 November 2014 в 00:42
поделиться