【问题标题】:What does linux system errors, errno 21 meanlinux系统错误,errno 21是什么意思
【发布时间】:2020-10-13 03:03:23
【问题描述】:

#define EISDIR 21 /* 是一个目录 */

当我收到此错误的地方来自open(destination, O_WRONLY);时,“是一个目录”不是很有帮助

当然这是一个目录,这就是我试图打开它的原因......

【问题讨论】:

  • 写目录的内容?阅读,是的,但不是写作。如果你正在阅读,你不想用open 打开。你想用opendir来做。
  • 给定系统调用的man page 旨在列出所有错误并描述它们所指示的内容。事实上,我们有“EISDIR:路径名指的是一个目录,并且请求的访问涉及写入(即设置了 O_WRONLY 或 O_RDWR)。”

标签: c unix errno


【解决方案1】:

您不能以写入模式 (O_WRONLY) 打开目录,只能读取 (O_RDONLY) 或搜索 (O_SEARCH)。对目录的所有修改都通过高级函数进行,这些函数使用目录的路径名或文件描述符,但不需要打开它进行写入。

这里,EISDIR 的意思是“您尝试执行的操作需要一个非目录,但您尝试在目录上执行它”。

【讨论】:

  • 哦.. 嗯.. 该死的我觉得这让我想做的事情变得复杂。但至少现在我知道错误代码是什么意思了哈哈谢谢伙计。
  • 打开它进行写入,您可能打算做什么?
  • 我试图打开一个目录以将其他目录中的文件和文件夹粘贴到。
  • @PapaSheng:要做到这一点,你需要rename/renameat(前者只需要一个路径名;后者可以使用文件描述符,O_RDONLY 很好,因为权限是在不基于fd模式的操作时间)进入目录(用于在同一设备上移动文件)或open/openat在目录中创建新文件并将旧文件的内容写入其中(用于复制或从不同的设备移动)。
猜你喜欢
  • 2011-02-21
  • 2015-06-09
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
  • 2013-11-10
相关资源
最近更新 更多