【发布时间】: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 中表示文件类型的方法,而有人选择了这些数字。它们是什么并不重要,只要它们彼此不同即可。