Linux I/O重定向的原理及实现
在Linux系统中,每个进程都有STDIN、STDOUT、STDERR这三种标准I/O。用过shell的同学们都知道,我们可以方便地对shell命令进行I/O重定向。
对Linux进程来讲,每个打开的文件都是通过文件描述符(File Descriptor)来标识的,内核为每个进程维护了一个File Descriptor Table(文件描述符表),这个表以FD为索引,再进一步指向文件的详细信息。在进程创建时,内核为进程默认创建了0、1、2三个特殊的FD,这就是STDIN、STDOUT和STDERR,如下图所示意:
平常说的Linux中的bash I/O重定向也就是让已创建的FD指向其他文件。比如,下面是对STDOUT重定向到testfile.txt前后内核文件描述符表变化的示意图:
Linux下I/O重定向例子
1 | 输出重定向:> |