/*
c4上,只申请一次root权限,执行多次root权限下的命令……
原理是,判断是不是root,如果不是,就申请root权限一次并以root权限重新执行自己……
这里有个小问题,以root权限执行自己时,原来的非root那个进程还留在内存没用,root进程执行完了还会回来,也就是浪费了点内存……
*/
#include <iostream>
#include <string>
#include <cstdlib>
//#include <sys/types.h>
#include <unistd.h>
using namespace std;
int main(int argc, char *args[])
{
if (getuid())// 判断 user ID,只有root是0……
{
cout << "现在不是root……" << endl;
string su("su -c ");
string exe(args[0]);
system((su + exe).c_str());// 最高权限运行自己……
// 会出现一个root权限的新进程,新进程走完后回到这里……
//这里仍然不是最高权限……
cout << "曾经是root?" << endl;
system("su -c \"echo 这次又要申请root权限……\"");
}
else
{
// 新进程是root权限,跳到这里走……
//以下命令全部都是root身份执行,不会再要求root权限,而且其实不需要再su -c了……
cout << "现在才是root……" << endl;
system("su -c \"echo 现在真的是root了……\"");
system("su -c \"echo 现在真的是root了……\"");
system("su -c \"echo 现在真的是root了……\"");
}
return 0;
}