https://www.cnblogs.com/wajika/p/6606353.html
vim 可视化
http://www.veryarm.com/296.html
交叉编译器类别
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
void print_current_id_info() {
printf(" uid = %d\n", getuid());
printf("euid = %d\n", geteuid());
printf(" gid = %d\n", getgid());
printf("egid = %d\n", getegid());
}
void usage() {
printf("usage: setid m n\n");
printf("m = 1 for setuid()\n");
printf("m = 2 for setgid()\n");
printf("m = 3 for setreid()\n");
printf("m = 4 for setregid()\n");
}
int main(int argc, char *argv[]) {
int ret = 0;
int id;
if(argc != 3) {
printf("please input the proper argument for m and n:\n");
usage();
return -1;
}
printf("****begin*****\n");
print_current_id_info();
printf("set.......\n");
id = atoi(argv[2]);
switch(atoi(argv[1])) {
case 1:
ret = setuid(id);
break;
case 2:
ret = setgid(id);
break;
case 3:
ret = setreuid(id, id);
break;
case 4:
ret = setregid(id, id);
break;
default:
printf("input for m is invalid!\n");
return -1;
}
if(ret == 0) {
printf("success!\n");
print_current_id_info();
} else {
printf("error!\n");
}
printf("*******end************\n");
return 0;
}