【问题标题】:what is if(errno != EEXIST) in c? [closed]c 中的 if(errno != EEXIST) 是什么? [关闭]
【发布时间】:2021-02-02 23:34:27
【问题描述】:

errno 和 EEXIST 是什么意思?

#include<errno.h>
    if(errno != EEXIST) {
        perror(sha1_dir);
        exit(1);
    }

我无法理解 if 语句的条件。是说“如果 errno 不存在”吗?

【问题讨论】:

  • 字面意思是“如果errno 不等于EEXIST”。
  • 现在它没有任何意义。 errno 可能由某个函数调用设置(它是一个变量,应该是作用域为线程局部的)。检查函数设置errno 以了解EEXIST 在该函数上下文中的含义。
  • 您可能会发现此页面很有帮助:en.cppreference.com/w/c/error/errno
  • errno 是什么取决于您未显示的那一行上方的代码。
  • 它的意思是,“如果之前失败的文件访问函数由于其他而不是文件不存在的原因而失败,则打印相关的错误消息并退出。”因此,如果文件存在但由于“权限被拒绝”之类的原因我们无法读取它,那就是错误。但是,如果我们无法读取文件的原因是因为它根本不存在,我们没关系,所以继续。当读取文件是可选的时,这是一种常见模式,例如配置文件或状态文件,用于在程序运行之间保存数据,但在程序第一次运行时不会存在。

标签: c errno


【解决方案1】:

如果您深入研究errno.h,您会发现EEXIST 是在另一个文件中定义的C 宏。在我的 Debian PC 上,它位于 /usr/include/asm-generic/errno-base.h

#define EEXIST      17  /* File exists */

运行man errno查找errno变量的含义:

DESCRIPTION
       The  <errno.h> header file defines the integer variable errno, which is
       set by system calls and some library functions in the event of an error
       to indicate what went wrong.

所以代码块的意思是检查最后一个函数生成的errno,如果不是“文件存在”(文件不存在),打印错误信息。

运行man perror 了解更多信息。说真的,在向 stackoverflow 提出这样的问题之前,您应该从某本书中学习 C。

猜你喜欢
  • 2010-11-08
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多