[Linux][Prog] Understanding Standard IO

What is stdout, stdin and stderr?
Actually, I am using these without deep understanding.
Now, it’s time to deep-dive to it.

Let me focus on stdout. (other twos are similar.)
What type of file default stdout is? Is it normal file? No, definitely. It’s device file.
So, two different processes can write data to same stdout directly.
(Normal file doesn’t allow this! )
I can easily know which device is used as stdout by checking devices.
(By entering following command in console.

ls -al /dev | grep stdout
    -> stdout -> /proc/self/fd/1

Interesting isn’t it?
Let me move forward.

ls -al /proc/self/fd/1
    -> 1 -> /dev/pts/7

Even if every process access standard output device with same name ‘stdout’, it branches to appropriate devices by symbolic link – ‘/proc/self’ is used.
Now I can guess what redirecting stdout is. Let me check it.

# redirecting stdout with sample program.
# something like this.
# main() { for(int i=0; i<10000000; i++) { sleep(1); printf("+"); fflush(stdout); }}
$ ./a.out > t &
$ ls -al /proc/<child pid>/fd/1
    -> 1 -> /xxxx/xxx.../t <= path of target file 't'