Я хотел бы использовать ls из execl и перенаправить вывод в файл, который существует. Я пытался с этим:Redirect ls using execl
int value = execl("/bin/ls","ls","-l",">/home/sbam/myfile",NULL);
Но это не работает ... Как я могу сделать?
Спасибо.
Я хотел бы использовать ls из execl и перенаправить вывод в файл, который существует. Я пытался с этим:Redirect ls using execl
int value = execl("/bin/ls","ls","-l",">/home/sbam/myfile",NULL);
Но это не работает ... Как я могу сделать?
Спасибо.
Перенаправление является частью оболочки, а не командами. Либо вызовите оболочку и выполните команду через оболочку, либо вы можете открыть файл с помощью 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");
Хотя исключение проверки ошибок часто является допустимой аббревиатурой в примере кода, я думаю, что здесь очень важно убедиться, что открытие успешно завершено. Исполнение не должно происходить, если сбой open. –
Используйте оболочку как '/ bin/ls' не один, и поэтому не понимает Перенаправление –
Если я пытаюсь от терминала (Xubuntu)' Ls -l> myfile', то я нашел выход ls -l в myfile. Я хотел бы сделать это с помощью execl –