next up previous
Next: Some istream methods: eof Up: iomethods Previous: iomethods

C++ and Unix I/O Streams

Unix recognizes three standard input and output streams, called standard input (stdin), standard output (stdout) , and standard error (stderr). Normally standard input is taken from the keyboard and standard output and error go to the screen. With iostream.h we access these streams through the standard names cin, cout, and cerr, respectively. There is also a clog associated with the standard error stream.

Unix iostream default
stdin istream cin keyboard
stdout ostream cout screen
stderr ostream cerr screen
stderr ostream clog screen
Why are there so many ways of writing to the screen? Suppose your program myprog generates output that a user would like to redirect to a file called outfile. The redirection works like this:
  myprog > outfile
Now suppose you wanted to your program to prompt the user for some information, or you wanted the user to see an error message. Such output really should go to the screen instead of to the file outfile where the user wouldn't notice it right away. The Unix solution is to provide two output streams, stdout and stderr, and declare that stdout gets redirected to the file in the command above, but stderr gets sent to the screen.

For example, in your C++ code you would write

  cout << data[i] << endl;
  cerr << "There is an error" << endl;
and the data value would then be redirected to outfile while the error message would appear on the screen. Without redirection everything goes to the screen.

One shouldn't be misled by the name cerr, which implies that it is used only for error messages. It is quite proper to use the cerr stream to prompt the user for input. The stream clog could also be used for that purpose.

next up previous
Next: Some istream methods: eof Up: iomethods Previous: iomethods
Carleton DeTar 2007-10-31