ruid, euid, suid 질문입니다. saved uid가 반영이 안되네요;

lacovnk의 이미지

// b.cc
      1 #include <stdio.h>
      2 #include <unistd.h>
      3 #include <sys/types.h>
      4
      5 int main(int argc, char** argv)
      6 {
      7         uid_t ruid,euid,suid;
      8         (void)getresuid(&ruid,&euid,&suid);
      9         printf("program B : RUID(%d) / EUID(%d) / SUID(%d)\n",ruid,euid,suid);
     10         fflush(stdout);
     11         execv("./c",NULL);
     12         return 0;
     13 }

// c.cc
      1 #include <stdio.h>
      2 #include <unistd.h>
      3 #include <sys/types.h>
      4
      5 int main(int argc, char** argv)
      6 {
      7         uid_t ruid,euid,suid;
      8         (void)getresuid(&ruid,&euid,&suid);
      9         printf("program C : RUID(%d) / EUID(%d) / SUID(%d)\n",ruid,euid,suid);
     10         fflush(stdout);
     11         return 0;
     12 }

// test
chown otheruser c && chmod 4755 c
./b
program B : RUID(1000) / EUID(1000) / SUID(1000)
program C : RUID(1000) / EUID(1006) / SUID(1006)
chown root c && chmod 4775 c
./b
program B : RUID(1000) / EUID(1000) / SUID(1000)
program C : RUID(1000) / EUID(0) / SUID(0)

의도는.. C에서 suid가 B의 euid인 것을 확인해보려고 했는데, 잘 안되네요; system 함수를 사용도 해보고, execv를 사용도 해봤는데.. 어떻게 하면 될까요?