一.dup和dup2 实现重定向
1.文件描述符表
操作系统在管理文件时,会管理一张文件描述符表,根据打开的文件,分配一个文件描述符(int),根据该文件描述符,锁定指向该文件的指针,从而索取文件。
2.重定向
在linux中,可以使用**> 和 >>命令**来实现重定向,将控制台内容输入到文件中,它的具体实现就是dup函数。
实际操作中,用到的最多是dup2(int oldfd ,int newfd),以文件描述符为参数,返回被重定向的那个文件描述符。
重定向的原理就是将一个文件描述符的指针重新定位,不再指向它原本的指针,而是重定位到另一个文件。
通过重定向操作后,对进行重定向的这个文件描述符进行的操作,就成为了对它重定向的那个文件的操作。
>和>> 的原理就是将 输出设备文件 重定位到 指定文件,这样就实现了对指定文件的输入操作。
二.使用fcntl 实现重定向
fcntl函数
fd:文件描述符,cmd是宏命令(F_SETFL,F_GETFL等命令), 根据第二个参数,也可以具有第三个参数。
使用宏命令 F_DUPFD作为第二参数,第三参数写入一个文件描述符
fcntl(fd , F_DUPFD , nfd)
此函数表示将nfd文件描述符重定向到fd指向的那个文件