我对C完全陌生,很少使用它。这次我需要它来做一个大学项目。我必须编写一个小的C应用程序来测试我们在Linux内核(在调度器上)上所做的一些修改。
在脚本中,我想切换到另一个用户,以查看不同用户之间的CPU时间分布。所以我用根权限(即sudo/myapp)启动我的小C程序。在程序内部-在我执行了一些需要根权限的操作之后-我想通过调用seteuid(1000)或setuid(1000)切换回另一个uid,其中1000是现有用户的ID(我以前登录的用户)。然而,这个调用似乎没有任何效果,它也没有抛出任何异常。
这是我写的一个示例,只是为了测试uid切换:
#define _POSIX_SOURCE
#include <pwd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sched.h>
#include <unistd.h>
#include <string>
#include <time.h>
using namespace std;
int main(int argc, char *argv[])
{
int uid;
struct passwd *p;
if ((p = getpwuid(uid = getuid())) == NULL){
perror("getpwuid() error");
exit(1);
}
printf("***************************************\n");
printf("Executing user: %s (%d)\n", p->pw_name, p->pw_uid);
printf("***************************************\n");
seteuid(1000);
if ((p = getpwuid(uid = getuid())) == NULL){
perror("getpwuid() error");
exit(1);
}
printf("***************************************\n");
printf("Executing user: %s (%d)\n", p->pw_name, p->pw_uid);
printf("***************************************\n");
return 0;
}
有人知道为什么它不起作用吗??非常感谢您的帮助!谢谢
//编辑:
修改了CHSH提到的代码