首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么文件描述符只打开一次并读取一次?

为什么文件描述符只打开一次并读取一次?
EN

Unix & Linux用户
提问于 2020-12-29 20:46:30
回答 1查看 789关注 0票数 8

当我们自己打开文件描述符并将其重定向到stdin时,为什么只能使用1次呢?请看下面的例子来理解我想说的话。使用cat命令一次读取该文件后,将不会第二次通过同一个文件描述符读取该文件。

代码语言:javascript
复制
└─$ exec 6< input.txt
└─$ cat <&6
i am just string
and another string..
└─$ cat <&6
└─$
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-12-29 21:53:39

要打印文件,第一个cat必须读取它直到结束。exec 6< input.txt会导致shell保存文件描述符,直到外壳死亡或关闭为止,因此当第二个cat被调用时,文件偏移量仍然指向文件的末尾,因此没有向stdout写入任何内容。

如果在基于Linux的系统上,通过查看文件描述符信息可以看到这种情况:

代码语言:javascript
复制
echo "File contents" > input.txt
exec 6< input.txt
cat "/proc/$/fdinfo/6"
cat <&6
cat "/proc/$/fdinfo/6"
cat <&6

如果执行该脚本,您将得到以下内容

代码语言:javascript
复制
pos:    0
flags:  0100000
mnt_id: 113
File contents
pos:    14
flags:  0100000
mnt_id: 113

确认执行第二个cat时偏移量(D6)不是0,而是指向它的末尾。

若要重置偏移量,可以在exec 6< input.txt S之间添加另一个cat

票数 14
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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