I/O重定向

文件描述符:一个数组的索引号,每个进程都有其打开的一组文件,这些打开的文件被保持在一个数组中,文件描述符即为某文件在此数组中的索引号。

最低文件描述符:当打开文件时,为此文件安排的描述符总是此数组中最低可用位置的索引。

三种将标准输入定位到文件的方法:

 1、close-then-open策略:这种技术类似于挂断电话释放 一 条线路,然后再将电话拎起从而得到另一条线路 。开始的时候,系统中采用的是典型的设置。即 三 种标准流是被连接到终端设备上的 。输入的数据流经过文件描述符 0 而输出的流经过文伴描述符 1 和 2。接下来,第一步是 c!ose(O) ,即将标准输入的连接挂断 。 这里调用 close(O) 将标准输入与终端设备的连接切断。最后,使用 open (filename , 0 _RDONL Y) 打开一个想连接到U stdin 上的文件。当前的最低可用文件描述符是 0 ,因此所打开的文件将被连接到标准输入上去。任何从标准输入读取数据的函数都将从此文件中读入 。

2、open.. close. . dup. . close:

#include <unistd.h>//复制文件描述符
int dup(int oldfd);
int dup2(int oldfd, int newfd);
   (1 ) open(file)第一步是打开 stdin 将要重定向的文件 。 这个调用返回一个文件描述符,这个描述符并不是 0 ,因为 。 在当前已经被打开了 。

  (2) close(0)下一步是将文件描述符 0 关闭 。 文件描述符 0 现在已经空闲了 。

  (3) dup (fd )系统调用 dup (fd ) 将文件描述符 fd 做了一个复制 。 此次复制使用最低可用文件描述符号 。 因此,获得文件描述符是 0 。 这样,就将磁盘文件与文件描述符 0 连接在 一 起了 。
  (4) close(fd)最后,使用close(fd) 来关闭文件的原始连接,只留下文件描述符 0 的连接 。 

 3、open.. dup2. • close:,用系统调用 dup2(fd , 0) 来替换 close( 0)和 dup(fd) , dup2(orig , new) 将文件描述符 old 复制到文件描述符 new ,在此之前它先将文件描述符 new 上已经存在的连接关闭。

 标准冲输出的重定向:

 关键之处就在于 fork 和 exec 之间的时间间隙。在 fork 执行之后,子进程仍然在运行shell 程序,并准备执行 exec , exec 将替换进程中运行的程序,但它不会改变进程的属性和进程中所有的连接。也就是说,在运行过 exec 之后,进程的用户 ID 不会改变,其优先级不会改变,并且其文件描述符也和运行 exec 之前一样。注意,程序得到的是载入它的进程所打开的文件。(子进程继承父进程打开的文件的指针,子进程重定向标准输出)。

将标准输入、输出和错误信息输出连接到文件:
 (1)标准输入、输出以及错误输出分别对应于文件描述符0、 1 、 2;
 (2) 内核总是使用最低可用文件描述符;
 (3) 文件描述符集合通过 exec 调用传递,且不会被改变。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值