> Redirecting stdout to a file using dup2?

Redirecting stdout to a file using dup2?

Posted at: 2014-12-18 
/***************************************...

// for sending the output to another file (I'm leaving out error checking to focus on the important details):

/**************************************...

if (fork() == 0)

{

// child

int fd = open(file, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);

dup2(fd, 1); // make stdout go to file

dup2(fd, 2); // make stderr go to file - you may choose to not do this

// or perhaps send stderr to another file

close(fd); // fd no longer needed - the dup'ed handles are sufficient

exec(...);

}

/**************************************...

// For sending the output to a pipe so you can then read the output into a buffer:

/**************************************...

int pipefd[2];

pipe(pipefd);

if (fork() == 0)

{

close(pipefd[0]); // close reading end in the child

dup2(pipefd[1], 1); // send stdout to the pipe

dup2(pipefd[1], 2); // send stderr to the pipe

close(pipefd[1]); // this descriptor is no longer needed

exec(...);

}

else

{

// parent

char buffer[1024];

close(pipefd[1]); // close the write end of the pipe in the parent

while (read(pipefd[0], buffer, sizeof(buffer)) != 0)

{

}

}

I am trying to redirect stdout to a file using the commands open, dup2, and close. For example we will receive: ls -sF > junk from the user.

I am using if(!strcmp(args[1], ">")) to determine if its a redirection call.

Thanks in advance!