Я совершенно новичок в C и использую его очень редко. На этот раз мне это нужно для университетского проекта. Я должен написать небольшое приложение c, которое тестирует некоторые модификации, которые мы сделали в ядре Linux (в планировщике).
Внутри скрипта я бы хотел переключиться на другого пользователя, чтобы увидеть распределение времени процессора между разными пользователями. Поэтому я запускаю свою маленькую прогу C с правами root (т.е. с sudo ./myapp). Внутри проги - после того, как я выполнил некоторые операции, для которых нужны права root, - я бы хотел переключиться обратно на другой uid, вызвав seteuid (1000) или setuid (1000), где 1000 - это идентификатор существующего пользователя (которого я использовал для входа на). Однако вызов, кажется, не имеет никакого эффекта, он также не выдает никаких исключений.
Вот пример, который я написал, чтобы проверить переключение 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