shell运用中exec与文件描述符

 首先咱们需了解‘文件描述符’的概念,内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也须要使用文件描述符来指定待读写的文件。ide

  文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件。文件描述符与包括相关信息(如文件的打开模式、文件的位置类型、文件的初始类型等)的文件对象相关联,这些信息被称做文件的上下文url

如何建立文件描述符
进程获取文件描述符最多见的方法是经过本机 子例程 open或create获取或者经过从 父进程 继承。后一种方法容许子进程一样可以访问由 父进程 使用的文件。文件描述符对于每一个进程通常是惟一的。当用fork 子例程 建立某个子进程时,该子进程会得到其父进程全部文件描述符的副本,这些文件描述符在执行fork时打开。在由fcntl、dup和 dup2 子例程复制或拷贝某个进程时,会发生一样的复制过程。
对于每一个进程, 操做系统 内核 在u_block结构中维护文件描述符表,全部的文件描述符都在该表中创建索引。

################################################################################################################################################################################## spacer.gif

echo 123546 > 2.txt ******》123546重定向到一个2.txt的文件
spa

exec 4<> 2.txt ******》以读写的方式绑定到文件描述符“4”中(能够理解“4”为一个设置的变量)
read -n 4 <&4 ******》从&4中读取4个字符(& 是在重定向里用来表示文件描述符,&0 表示标准输入。若是不用 & 那就会被认为是以 0 为名字的文件了,因此这其实也是一个语法的规定而已。)
echo -n . >&4 ******》向&4中以横向增长一个点“.”(由于以前设置了'read -n 4',因此这个点将加在第四位后面,即1235.6;若是是“..”,那么就是1235..)
exec 4>&- ******》关闭输出文件描述符4
##############################################################################################################################################举例以下:
[root@david /tmp 02:27 &50]#echo 123456 >2.txt
[root@david /tmp 02:28 &51]#cat 2.txt
123456
[root@david /tmp 02:28 &52]#exec 8<>2.txt
[root@david /tmp 02:28 &53]#cat 2.txt
123456
[root@david /tmp 02:28 &54]#read -n 4 <&8
[root@david /tmp 02:29 &55]#cat 2.txt
123456
[root@david /tmp 02:29 &56]#echo -n .. >&8
[root@david /tmp 02:30 &57]#cat 2.txt
1234..
[root@david /tmp 02:30 &58]#exec 8>&-
[root@david /tmp 02:31 &59]#cat 2.txt
1234..
##############################################################################################################################################
相关文章
相关标签/搜索