2016-01-04 3 views
0

Я хотел бы использовать ls из execl и перенаправить вывод в файл, который существует. Я пытался с этим:Redirect ls using execl

int value = execl("/bin/ls","ls","-l",">/home/sbam/myfile",NULL);

Но это не работает ... Как я могу сделать?

Спасибо.

+0

Используйте оболочку как '/ bin/ls' не один, и поэтому не понимает Перенаправление –

+0

Если я пытаюсь от терминала (Xubuntu)' Ls -l> myfile', то я нашел выход ls -l в myfile. Я хотел бы сделать это с помощью execl –

ответ

1

Перенаправление является частью оболочки, а не командами. Либо вызовите оболочку и выполните команду через оболочку, либо вы можете открыть файл с помощью open и использовать dup2, чтобы сделать файл стандартным выходом процесса.

Что-то вроде

int fd = open("/home/sbam/myfile", O_CREAT | O_WRONLY, 0644); 
if (fd != -1) 
{ 
    if (dup2(fd, STDOUT_FILENO) != -1) 
    { 
     if (execl("/bin/ls", "ls", "-l", NULL) == -1) 
      perror("execl"); 
    } 
    else 
     perror("dup2"); 
} 
else 
    perror("open"); 
+1

Хотя исключение проверки ошибок часто является допустимой аббревиатурой в примере кода, я думаю, что здесь очень важно убедиться, что открытие успешно завершено. Исполнение не должно происходить, если сбой open. –