I'm in an operating systems course and doing assignments with C on Linux. In one of the assignments I was supposed to redirect and output to a file, but for some reason, I keep getting the output in the terminal instead. I tried writing a simple program to do just that and it still didn't work:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/fcntl.h>
#include <dirent.h>
void main(int argc, char* argv[]) {
int file1 = open("./text_try", O_CREAT | O_EXCL, 0666) //open file
printf("write to screen\n"); //print to screen
int oldOut = dup(1); //save screen FD
dup2(file1,1); //change output stream from screen to file
printf("write to file"); //print to file
dup2(oldOut,1); //change output stream from file back screen
printf("write to screen"); //print to screen
}
other things I tried :
- changing the permissions on the file open (adding
O_RDWR
) - running on 2 separate PCs - i run mainly on remote desktop to the uni pc for linux but also got VMware on the laptop.
- tried using
close
+dup
combo instead ondup2
- tried using conditions with
perror
to see if any step will tip me off as to why it doesn't work. - tried using
STDOUT_FILENO
instead of 1 for output
would really appreciate any help on this!