首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在附加到文件描述符后立即删除fifo文件?

为什么在附加到文件描述符后立即删除fifo文件?
EN

Stack Overflow用户
提问于 2020-05-05 15:11:39
回答 1查看 444关注 0票数 0
代码语言:javascript
复制
fifo_file=fifo.pipe
mkfifo $fifo_file
exec 6<>$fifo_file
rm $fifo_file
some_code_omit

上面bash脚本创建了一个命名管道,并将其附加到一个文件描述符6

代码语言:javascript
复制
exec 6<>$fifo_file

为什么在附加到文件描述符后立即删除rm $fifo_file文件?我可以像下面这样写代码吗?

代码语言:javascript
复制
fifo_file=fifo.pipe
mkfifo $fifo_file
exec 6<>$fifo_file
some_code_omit
rm $fifo_file

它们之间有什么不同吗?

rm $fifo_file表示删除$fifo_file的名称,而不是删除文件$fifo_file,在rm $fifo_file之后,该文件仍然存在。

EN

回答 1

Stack Overflow用户

发布于 2020-05-05 18:25:05

在创建并打开文件以进行读写之后,通过删除文件系统条目(这将使实际文件保持不变,直到它被关闭以进行读写),您可以避免无用的条目污染文件系统。不幸的是,这意味着如果脚本在rm命令运行之前终止,mkfifo命令将在下一次运行时失败:

代码语言:javascript
复制
$ mkfifo foo
$ mkfifo foo
mkfifo: cannot create fifo 'foo': File exists

一种可能的改进是

  1. 通过在每次运行时创建不同的文件来保证避免冲突,
  2. 在只有创建者才能访问的目录中创建先进先出文件(假设您使用正常的umask),并且
  3. 在脚本退出时进行清理,没有任何计时问题:

代码语言:javascript
复制
trap 'rm --recursive "$working_directory"' EXIT
working_directory="$(mktemp --directory)"
fifo_file="${working_directory}/fifo.pipe"
…
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61607658

复制
相关文章

相似问题

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