stdout je FILE * ukazatel standardního výstupního proudu. dup2 očekává deskriptor souboru, také jste zpackali parametry order.Use
dup2(file, 1);
místo toho.
 Na lepší způsob, jak to udělat. Tento způsob je špatný, protože pravděpodobně budete chtít obnovit svůj standardní výstup po tomto system hovor se dokončí. Můžete to udělat různými způsoby. Můžete dup to někam a pak dup2 jej zpět (a zavřete dup ped jeden). Osobně nerad píšu vlastní cat implementace, jak je navrženo v jiných odpovědích. Pokud jediné, co chcete, je přesměrování jediného příkazu shellu s system do souboru v souborovém systému, pak pravděpodobně nejpřímějším a nejjednodušším způsobem je vytvořit příkaz shell, který to udělá jako
system("ls -l > Result");
 Ale musíte být opatrní, pokud název souboru (Výsledek) pochází z uživatelského vstupu, protože uživatel může zadat něco jako 'Result; rm -rf /*' jako název souboru.
 Pokud jde o zabezpečení, měli byste zvážit zadání úplné cesty k ls jak je navrženo v komentářích:
system("/bin/ls -l > Result");
 Jednoduchá věc je použít > skutečně:
#include <stdio.h>
int main()
{
    system("ls -l > /some/file");
    return 0;
}
 Alternativou je použití popen() , něco ve smyslu
   #include <stdio.h>
   #include <stdlib.h>
   main()
   {
           char *cmd = "ls -l";
           char buf[BUFSIZ];
           FILE *ptr, *file;
           file = fopen("/some/file", "w");
           if (!file) abort();
           if ((ptr = popen(cmd, "r")) != NULL) {
                   while (fgets(buf, BUFSIZ, ptr) != NULL)
                           fprintf(file, "%s", buf);
                   pclose(ptr);
           }
           fclose(file);
           return 0;
   }
 Měli byste použít popen() funkce knihovny a čtení částí dat z vráceného FILE * a zapište je do libovolného výstupního souboru.
Reference.