I had read that both perror()
and printf()
write to the terminal screen. But perror()
writes to stderr
while printf()
writes to stdout
. So, to print errors why is perror()
used when printf()
can do it.
printf()
cannot write to stderr
. fprintf()
can. perror()
always does.
There is no requirement that writing to either stdout
or stderr
writes to a terminal screen - that is up to the implementation (since not all systems even have a terminal). There is also no requirement that writing to stdout
and stderr
results in writing to the same device (e.g. one can be redirected to a file, while the other is redirected to a pipe).
perror()
will be implemented with built-in knowledge of the meanings of error codes, represented by the static errno
, which is used by various functions in the standard library to report error conditions. The meanings of particular values are implementation defined (i.e. they vary between compilers and libraries).