首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重置文件描述符

如何重置文件描述符
EN

Unix & Linux用户
提问于 2014-03-18 05:03:11
回答 2查看 6.7K关注 0票数 2

我试图使用文件描述符来打印文件中的行。

代码语言:javascript
复制
#!/usr/bin/ksh
exec 3<&0
exec 0< file.txt
while read LINE
do
   echo “$LINE”
done

我完成了我的代码,它按照我的愿望打印输出。

我忘记将文件描述符重置为0。

代码语言:javascript
复制
exec 0<&3

会发生什么?

  1. 描述符作用域只会在程序或整个unix中持续?
  2. 我们如何知道哪个值持有哪个文件描述符(使用shell打印文件描述符的值)
  3. 它会自动重置系统(AIX)重新启动吗?
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2014-03-18 07:52:31

文件描述符属于一个进程:当前进程,即。当您退出进程时,赋值立即没有任何效果。即使是继承文件描述符的子child (或任何子进程),也可以从fork()调用自己的文件描述符副本(文件描述符只是指向linux内核中的IO资源的一个数字)。这就像打开文件一样--在一个进程中打开一个文件并不能为每个人打开它,如果您不亲自关闭它,linux就会关闭它并在进程终止时清理它。

票数 3
EN

Unix & Linux用户

发布于 2014-03-18 08:25:51

我们如何知道哪个值持有哪个文件描述符(使用shell打印文件描述符的值)

您可以通过/proc文件系统列出进程的所有文件描述符,使用

代码语言:javascript
复制
ls -l /proc/<PID>/fd

示例:

代码语言:javascript
复制
$ 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_upgrades
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/120149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档