// switch_stdout.c: demonstrates use of dup2() and dup() to redirect // standard output to a new location temporarily and then restore it. #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> int main(){   int stdout_bak = dup(STDOUT_FILENO); // make a backup of stdout   system("rm -f mystery.txt");         // remove file using a shell command   int out_fd = open("mystery.txt",     // open file mystery.txt                     O_WRONLY|O_CREAT,  // for writing, create if needed                     S_IRUSR|S_IWUSR);  // give user read/write permission   if(out_fd == -1){                    // check for errors opening file     perror("Couldn't open file 'mystery.txt'");     exit(1);                           // bail out if open fails   }   printf("1. Now you see me.\n");      // print to the screen   dup2(out_fd, STDOUT_FILENO);         // change stdout to go to mystery.txt   printf("2. Now you don't!\n");       // print goes to mystery.txt   close(out_fd);                       // close mystery.txt   dup2(stdout_bak, STDOUT_FILENO);     // restore stdout to screen   printf("3. How mysterious...\n");    // print goes to screen   return 0; }     Good old `printf()' is used in `switch_stdout.c' in several places but  seems to change its behavior in some of these spots. Can you describe this variation in behavior?

Database System Concepts
7th Edition
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Chapter1: Introduction
Section: Chapter Questions
Problem 1PE
icon
Related questions
Question
// switch_stdout.c: demonstrates use of dup2() and dup() to redirect
// standard output to a new location temporarily and then restore it.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

int main(){
  int stdout_bak = dup(STDOUT_FILENO); // make a backup of stdout

  system("rm -f mystery.txt");         // remove file using a shell command

  int out_fd = open("mystery.txt",     // open file mystery.txt
                    O_WRONLY|O_CREAT,  // for writing, create if needed
                    S_IRUSR|S_IWUSR);  // give user read/write permission

  if(out_fd == -1){                    // check for errors opening file
    perror("Couldn't open file 'mystery.txt'");
    exit(1);                           // bail out if open fails
  }

  printf("1. Now you see me.\n");      // print to the screen

  dup2(out_fd, STDOUT_FILENO);         // change stdout to go to mystery.txt

  printf("2. Now you don't!\n");       // print goes to mystery.txt

  close(out_fd);                       // close mystery.txt

  dup2(stdout_bak, STDOUT_FILENO);     // restore stdout to screen

  printf("3. How mysterious...\n");    // print goes to screen

  return 0;
}
 
 
Good old `printf()' is used in `switch_stdout.c' in several places but
  seems to change its behavior in some of these spots. Can you describe this variation in behavior?
Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 2 steps

Blurred answer
Knowledge Booster
Arrays
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
Database System Concepts
Database System Concepts
Computer Science
ISBN:
9780078022159
Author:
Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:
McGraw-Hill Education
Starting Out with Python (4th Edition)
Starting Out with Python (4th Edition)
Computer Science
ISBN:
9780134444321
Author:
Tony Gaddis
Publisher:
PEARSON
Digital Fundamentals (11th Edition)
Digital Fundamentals (11th Edition)
Computer Science
ISBN:
9780132737968
Author:
Thomas L. Floyd
Publisher:
PEARSON
C How to Program (8th Edition)
C How to Program (8th Edition)
Computer Science
ISBN:
9780133976892
Author:
Paul J. Deitel, Harvey Deitel
Publisher:
PEARSON
Database Systems: Design, Implementation, & Manag…
Database Systems: Design, Implementation, & Manag…
Computer Science
ISBN:
9781337627900
Author:
Carlos Coronel, Steven Morris
Publisher:
Cengage Learning
Programmable Logic Controllers
Programmable Logic Controllers
Computer Science
ISBN:
9780073373843
Author:
Frank D. Petruzella
Publisher:
McGraw-Hill Education