【问题标题】:Open file for reading and executing (but not writing)打开文件进行读取和执行(但不写入)
【发布时间】:2018-05-08 22:37:28
【问题描述】:

我在这里查看fs.open()

https://nodejs.org/api/fs.html#fs_fs_open_path_flags_mode_callback

我想打开一个文件来读取和执行。

它给出了这些标志:

'r' - 打开文件进行读取。如果文件没有出现异常 存在。

'r+' - 打开文件进行读写。如果发生异常 文件不存在。

'rs+' - 以同步模式打开文件进行读写。 指示操作系统绕过本地文件系统缓存。

这主要用于在 NFS 挂载上打开文件,因为它允许 跳过可能陈旧的本地缓存。它有非常真实的影响 关于 I/O 性能,因此不建议使用此标志,除非它是 需要。

请注意,这不会将 fs.open() 变成同步阻塞 称呼。如果需要同步操作 fs.openSync() 应该是 用过。

'w' - 打开文件进行写入。文件已创建(如果没有 存在)或截断(如果存在)。

'wx' - 类似于 'w' 但如果路径存在则失败。

'w+' - 打开文件进行读写。文件已创建(如果 不存在)或被截断(如果存在)。

'wx+' - 类似于 'w+' 但如果路径存在则失败。

'a' - 打开文件进行追加。如果没有,则创建该文件 存在。

'ax' - 类似于 'a' 但如果路径存在则失败。

'a+' - 打开文件进行读取和附加。如果文件被创建 不存在。

'ax+' - 类似于 'a+' 但如果路径存在则失败。

我猜想读取和执行的开放是rx,但这只是一个猜测,有人确定吗?一定有它没有列出的原因?

【问题讨论】:

  • 是的,正如我所怀疑的那样,我的“猜测”是错误的 - 如果我使用一个名为“rx”的虚构标志 - 我会收到这个错误 - Error: Unknown file open flag: rx

标签: node.js fs


【解决方案1】:

无论如何,您将无法从文件流中执行,因此没有打开读取和执行之类的东西。执行独立于该流。

要执行,请查看 child_process 及其各种方法。

【讨论】:

  • 赞成...呃,这有点蹩脚,因为现在我必须进行 2 个并行 fs 调用,一个检查它是否可读,另一个检查它是否可执行,能够做到这一点会很好二合一?
  • @AlexanderMills 您正在解决的根本问题是什么?通常,您不想检查某些内容是否可读或可执行……您只需尝试读取并执行并查看它是否有效。原因是在第一次检查和您实际需要打开或执行的时间之间,状态可能已经改变。另一方面,如果您只是检查,您总是可以为权限列出目录......但这并不能告诉您太多关于您的应用正在运行的用户。
  • 是的,我同意你想避免你提到的那种竞争条件。嗯,问题是如果我尝试直接执行它,并且文件没有 hashbang,则在文件上调用/bin/sh,并且几乎不可能知道为什么文件无法正确执行(如果文件不应该被sh 解释)。就我而言,尝试找出文件是否可执行是安全的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多