まずはmy codeを見てみましょう。getgrnam()をgetgrent()でC言語で使用する方法
#include <stdio.h>
#include <grp.h>
#include <pwd.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
int main(int argc, char** argv){
struct group *grp;
struct group *tmpGrp;
struct passwd *pw;
int n;
gid_t gid;
pw=getpwnam(argv[1]);
gid=pw->pw_gid;
printf(“%s”,pw->pw_name);
printf(“\n”);
grp = getgrgid(gid);
char *mainGrp = grp->grame;
printf(“out : %s\t”, mainGrp);
while((tmpGrp=getgrgent())!=NULL){
n=0;
printf(“in : %s\t”,mainGrp);
}
printf(“\n”);
return 0;
}
、それはようである出力です:getgrnamを使用しているとき、見ての通り
root
out : root in : root in : other in : bin in : sys ....
()とのgetgrent()は、同時に、グループ名が文字列で割り当てられていても、変更されました。私は)
root
out : root in : root in : root in : root ....
コードルーチンgetgrgent(のようになりたい
はただの後の文字列に割り当てることであるが、なぜこの起こるの?それを修正する方法は?
テストオペレーティングシステム:Solaris 10の
テストコンパイラ:this (Linux) manual page for getgrent
からGCC
ありがとうございました! –