我是C的新手,我很少使用它。这次我需要它用于大学项目。我必须编写一个小型的应用程序来测试我们在Linux内核上做的一些修改(在调度程序上)。
在脚本内部,我想切换到另一个用户,以查看不同用户之间的CPU时间分布。所以我用root权限启动我的小C编程(即使用sudo ./myapp)。在prog中 - 在我执行了一些需要root权限的操作之后 - 我想通过调用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;
}
有谁知道它为什么不起作用?任何帮助都非常感谢! THX
//编辑: 修正了chsh
提到的代码答案 0 :(得分:3)
我认为它工作正常,代码中的逻辑只是一个问题,因为你将getuid()的值捕获到passwd结构中,然后只是显示它两次而不是在调用seteuid之后再次检索它()。