Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gdb 关于结构类型stat和系统调用函数,如S_ISREG_Gdb_Stat - Fatal编程技术网

Gdb 关于结构类型stat和系统调用函数,如S_ISREG

Gdb 关于结构类型stat和系统调用函数,如S_ISREG,gdb,stat,Gdb,Stat,因此,我试图理解内置函数,如S_ISREG、S_IXUSR等。我很难理解像这些函数返回的是什么,或者它们通常做什么,以及它们如何处理系统调用,比如stat,这是(从我读到的)一个系统结构 太棒了,太酷了。但我不明白的是这些变量或函数返回什么?我读到它们都互相帮助,但是st->st\u模式返回的是什么输出,使函数S\u ISREG有效 总而言之: 像S_ISREG这样的函数接收什么,它们返回什么?struct type stat包含哪些内容使其能够被S_ISREG验证使用? PS:我在下面找到了这

因此,我试图理解内置函数,如S_ISREG、S_IXUSR等。我很难理解像这些函数返回的是什么,或者它们通常做什么,以及它们如何处理系统调用,比如stat,这是(从我读到的)一个系统结构

太棒了,太酷了。但我不明白的是这些变量或函数返回什么?我读到它们都互相帮助,但是
st->st\u模式
返回的是什么输出,使函数
S\u ISREG
有效

总而言之:

像S_ISREG这样的函数接收什么,它们返回什么?struct type stat包含哪些内容使其能够被S_ISREG验证使用?

PS:我在下面找到了这个函数,我只是想更好地理解它。如果你想解释这一点以及下面的函数,那就更好了

static int
    valid_cgi_script(struct stat *st)
    {
        if (!S_ISREG(st->st_mode))
            return 0;

        if (!(st->st_mode & S_IXUSR))
            return 0;

        if (cgi_uid >= 0 && cgi_gid >= 0) {
            if (st->st_uid != cgi_uid || st->st_gid != cgi_gid)
                return 0;
        }

        return 1;
    }
像S_ISREG这样的函数接收什么,它们返回什么

在大多数libc实现中,
S_ISREG
不是一个函数,而是一个宏。您可以在
/usr/include
(或安装系统头的任何位置)中查找其定义:

事实上,该标准规定“应提供以下宏来测试文件是否为指定类型”。尽管我不相信该标准的意图是说
S_ISREG
必须是宏

宏接收一个整数
st_mode
,如果文件不是常规文件,则生成一个整数
0
,如果文件是常规文件,则生成一个非零整数

static int
valid_cgi_script(struct stat *st)
{
    if (!S_ISREG(st->st_mode))
如果文件不是常规文件,则返回0(false)

如果文件不可由拥有该文件的用户执行,则返回0

        return 0;

    if (cgi_uid >= 0 && cgi_gid >= 0) {
        if (st->st_uid != cgi_uid || st->st_gid != cgi_gid)
            return 0;
    }
如果设置了
cgi\u uid
cgi\u gid
全局变量,并且文件的所有者或组与它们不匹配,则返回0

        return 0;

    if (cgi_uid >= 0 && cgi_gid >= 0) {
        if (st->st_uid != cgi_uid || st->st_gid != cgi_gid)
            return 0;
    }
否则,返回1(true)


grep-r的S_ISREG/usr/include部分确实帮助了我,我可以在标题中看到定义。现在我需要了解宏是如何工作的,但我只使用过像#define NUM 3这样的宏,仅此而已。但我看到的是:#define S#u ISREG(mode)u S_ISTYPE((mode),u S_IFREG)试图找出这些定义是如何工作的
    return 1;
}