【问题标题】:Trying to understand macros that define file types试图理解定义文件类型的宏
【发布时间】:2015-09-10 01:15:39
【问题描述】:

所以我一直在尝试在 gdb 中调试一个程序,并让我了解我需要分析它的某个部分。

if (!S_ISREG(st->st_mode))

if (!(st->st_mode & S_IXUSR))

在上面的 if 中,S_ISREG 和 S_IXUSR 是我不理解的宏。当我尝试对这些宏进行更多调查时,我发现了这些其他宏:

/* File types.  */
#define __S_IFDIR       0040000 /* Directory.  */
#define __S_IFCHR       0020000 /* Character device.  */
#define __S_IFBLK       0060000 /* Block device.  */
#define __S_IFREG       0100000 /* Regular file.  */
#define __S_IFIFO       0010000 /* FIFO.  */
#define __S_IFLNK       0120000 /* Symbolic link.  */`enter code here`
#define __S_IFSOCK      0140000 /* Socket.  */

我只想知道宏旁边的数字是什么意思?那么这些以“__”开头的宏呢?我想我不久前听说这些是子宏或其他东西。如果有人能解释这两个,那就太棒了!

【问题讨论】:

  • 除非你看到它的定义,否则不可能知道宏的作用。也许向我们展示一个我们可以翻译的定义?
  • 对于文件类型宏,这些只是数字(八进制),用于区分系统上不同类型的文件。这些数字本身可能没有任何意义,而只是每种文件类型的唯一标识符。可以是任何东西,只要它们是不同的。
  • 我想知道这些数字,我知道它们意味着什么,而不是关于这些宏的定义。
  • 它们没有任何意义。它们只是数字。没有特别的理由为常规文件选择0100000 或为目录选择0040000。他们只需要一种在 C 中表示文件类型的方法,而有人选择了这些数字。它们是什么并不重要,只要它们彼此不同即可。

标签: c macros gdb


【解决方案1】:

你看,创建这个文件系统的人只需要一些不同的值来表示不同类型的文件,一个值对应一种类型,没有具体原因为什么 0040000 表示目录,如果你是文件系统的作者,你可以指定任何你喜欢的值来表示目录,所以没有为什么,只要关注评论就知道了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多