Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.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
如何在C中正确显示groupID(GID)?_C_Linux_Unix - Fatal编程技术网

如何在C中正确显示groupID(GID)?

如何在C中正确显示groupID(GID)?,c,linux,unix,C,Linux,Unix,我试图通过C程序中的一个函数显示我的userID和groupID。用户ID显示正确(501),但我的groupID显示不正确。当我使用命令“id-g”检查我的groupID时,我得到了20,但是当我使用我的函数在程序中运行它时,我得到了值1 这是我的密码 int Registerpw(char **args){ register struct passwd *pw; register uid_t uid; int c; register gid_t gid;

我试图通过C程序中的一个函数显示我的userID和groupID。用户ID显示正确(501),但我的groupID显示不正确。当我使用命令“id-g”检查我的groupID时,我得到了20,但是当我使用我的函数在程序中运行它时,我得到了值1

这是我的密码

int Registerpw(char **args){

    register struct passwd *pw;
    register uid_t uid;
    int c;
    register gid_t gid;
    register struct group *grp;
    grp = getgrgid(gid);

    uid = geteuid();
    pw = getpwuid(uid);


    if (pw)
    {
            printf("%d,",uid);      // userID
            printf("%d,", gid);    //groupID
            puts (pw->pw_name);
            puts(grp->gr_name);


    }
    else{
        printf("failed\n");
    }
    return 1;
}
我的输出是

501,1,USERNAME
daemon

您的代码仅声明并定义了
gid
的变量,但未初始化其值。您应为其指定正确的值:

register gid_t gid;
gid = getgid();
或者简单地说:

register gid_t gid = getgid();

您的代码仅声明并定义了
gid
的变量,但未初始化其值。您应为其指定正确的值:

register gid_t gid;
gid = getgid();
或者简单地说:

register gid_t gid = getgid();

我只是简单地使用int数据类型声明变量,并使用getgid()和geteuid()方法来显示userid和groupid。

int gid,uid;
uid=geteuid();
gid=getgid();

我只是简单地使用int数据类型声明变量,并使用getgid()和geteuid()方法来显示userid和groupid。

int gid,uid;
uid=geteuid();
gid=getgid();


是否缺少为
gid
赋值的语句?@MarkPlotnick
register gid\u t gid
正在获取gid@Recap这一行代码仅仅声明并定义了
gid
的变量,未初始化该值。上面的代码从未初始化过
gid
。是否缺少为
gid
赋值的语句?@MarkPlotnick
register gid\u t gid
正在获取gid@Recap这一行代码仅仅声明并定义了
gid
的变量,未初始化该值。上面的代码从未初始化过
gid
。感谢您的澄清。我犯了一个愚蠢的错误。你知道我怎么能在一行中打印所有这些内容吗?如果您查看我的输出,您可以看到它将groupName打印在下面的行中,因为我将其保存在“puts”中。你知道我如何避免在“puts”中使用它,并可能以不同的方式打印它吗?@Recap
puts
会在你试图打印的字符串中附加一个换行符。如果不需要换行符,可以使用类似于
printf(“%s”,pw->pw_name)的内容printf(“%s”,pw->pw_name)时我得到
“分段错误:11”
返回,它退出program@Recap你能不能再发一个问题来描述这个问题(推荐)?或者请至少编辑您的原始问题,添加导致问题的当前代码(不推荐)。由于您的代码可能已多次更改,其他人不知道实际发生了什么。感谢您的澄清。我犯了一个愚蠢的错误。你知道我怎么能在一行中打印所有这些内容吗?如果您查看我的输出,您可以看到它将groupName打印在下面的行中,因为我将其保存在“puts”中。你知道我如何避免在“puts”中使用它,并可能以不同的方式打印它吗?@Recap
puts
会在你试图打印的字符串中附加一个换行符。如果不需要换行符,可以使用类似于
printf(“%s”,pw->pw_name)的内容printf(“%s”,pw->pw_name)时我得到
“分段错误:11”
返回,它退出program@Recap你能不能再发一个问题来描述这个问题(推荐)?或者请至少编辑您的原始问题,添加导致问题的当前代码(不推荐)。因为您可能对代码进行了多次更改,其他人不知道实际发生了什么。虽然此代码可能会回答此问题,但提供有关此代码为什么和/或如何回答此问题的其他上下文可以提高其长期价值。虽然此代码可能会回答此问题,提供关于此代码为什么和/或如何回答此问题的附加上下文可提高其长期价值。