我试图使用文件描述符来打印文件中的行。
#!/usr/bin/ksh
exec 3<&0
exec 0< file.txt
while read LINE
do
echo “$LINE”
done我完成了我的代码,它按照我的愿望打印输出。
我忘记将文件描述符重置为0。
exec 0<&3会发生什么?
发布于 2014-03-18 07:52:31
文件描述符属于一个进程:当前进程,即。当您退出进程时,赋值立即没有任何效果。即使是继承文件描述符的子child (或任何子进程),也可以从fork()调用自己的文件描述符副本(文件描述符只是指向linux内核中的IO资源的一个数字)。这就像打开文件一样--在一个进程中打开一个文件并不能为每个人打开它,如果您不亲自关闭它,linux就会关闭它并在进程终止时清理它。
发布于 2014-03-18 08:25:51
我们如何知道哪个值持有哪个文件描述符(使用shell打印文件描述符的值)
您可以通过/proc文件系统列出进程的所有文件描述符,使用
ls -l /proc/<PID>/fd示例:
$ ls -l /proc/2218/fd
total 0
lr-x------ 1 setacinq setacinq 64 Mar 14 09:29 0 -> /dev/null
l-wx------ 1 setacinq setacinq 64 Mar 14 09:29 1 -> /dev/null
lr-x------ 1 setacinq setacinq 64 Mar 14 09:29 18 -> pipe:[14524]
l-wx------ 1 setacinq setacinq 64 Mar 14 09:29 19 -> pipe:[14524]
l-wx------ 1 setacinq setacinq 64 Mar 14 09:29 2 -> /home/setacinq/.xsession-errors
lrwx------ 1 setacinq setacinq 64 Mar 14 09:29 22 -> anon_inode:[eventfd]
lrwx------ 1 setacinq setacinq 64 Mar 14 09:29 23 -> anon_inode:[eventfd]
lrwx------ 1 setacinq setacinq 64 Mar 14 09:29 28 -> socket:[14566]
lr-x------ 1 setacinq setacinq 64 Mar 14 09:29 30 -> /usr/share/unity/lenses/commands/commands.lens
lrwx------ 1 setacinq setacinq 64 Mar 14 09:29 32 -> socket:[11753]
lr-x------ 1 setacinq setacinq 64 Mar 14 09:29 35 -> /usr/share/unity/lenses/music/music.lens
lr-x------ 1 setacinq setacinq 64 Mar 14 09:29 36 -> /usr/share/unity/lenses/files/files.lens
lr-x------ 1 setacinq setacinq 64 Mar 14 09:29 37 -> /usr/share/unity/lenses/applications/applications.lens
lr-x------ 1 setacinq setacinq 64 Mar 14 09:29 38 -> /usr/share/unity/lenses/video/video.lens
lr-x------ 1 setacinq setacinq 64 Mar 14 09:29 8 -> anon_inode:inotify
lrwx------ 1 setacinq setacinq 64 Mar 14 09:29 9 -> /home/setacinq/.config/compiz-1/compizconfig/done_upgradeshttps://unix.stackexchange.com/questions/120149
复制相似问题