redirecting output of execvp into a file in C
سؤال
I don't know what I am doing wrong... but here is the snippet of code that is being executed:
if (fork() == 0)
{
// child
int fd = open(fileName, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
dup2(fd, 1); // make stdout go to file
execvp("ls","ls");
close(fd);
exit(0);
}
if(wait(&status) == -1)
{
printf("ERROR REDIRECT\n");
}
fileName
gets created but there is nothing inside.What am I doing wrong?
المحلول
My guess is that the execvp doesn't work but since you don't handler errors you don't see it.
Try this:
char *const args[] = {"ls", NULL};
execvp(args[0], args);
/* If this is reached execvp failed. */
perror("execvp");
Alternatively you can use compound literals:
execvp("ls", (char *[]){"ls", NULL});
Second idea: try to run things normally, without redirect and see how it works.
نصائح أخرى
close fd before execvp. because the code after execvp never runs unless execvp fails.
لا تنتمي إلى StackOverflow