// -------------------------------------------------------------------------- // // Function // Name: unsigned int ProcessControl::getUID(int) // Purpose: Obtiene el UID del usuario que ejecuta el PID dado // Created: 25/6/08 // // ------------------ unsigned int ProcessControl::getUID(int pid) { qDebug() << "ProcessControl::getUID: Begin:"; #ifndef WIN32 int processuid=0; QString strpid, statusfilename; strpid.setNum(pid); statusfilename = QString("/proc/") + strpid + QString("/status"); if (!QFile::exists(statusfilename)) return 0; QFile statusfile(statusfilename); if (!statusfile.open(QIODevice::ReadOnly | QIODevice::Text)) return false; QTextStream in(&statusfile); QString line = in.readLine(); QRegExp regex("^Uid:\\t(\\d*)\\t(\\d*)\\t(\\d*)\\t(\\d*)$"); while(!line.isNull()){ qDebug() << "ProcessControl::getUID: Parsing line:" << line; if (regex.exactMatch(line)) { QStringList strlist = regex.capturedTexts(); qDebug() << "ProcessControl::getUID: UID:" << strlist.at(2); processuid = strlist.at(2).toInt(); break; } line = in.readLine(); } return processuid; #else assert(false); #endif }
main(int argc, char** argv) { int excludes = 0; program = argv[0]; while (--argc,++argv, argc>=1 && ((*argv)[0] == '-')) { switch ((*argv)[1]) { case 'd': { --argc,++argv; if (argc == 0) { usage(); exit(-1); } File f(*argv); if (!f.exists()) { fprintf(stderr, "Directory %s doesn\'t exist", *argv); fprintf(stderr, " (or needs to be file-name-expanded).\n"); usage(); exit(-1); } dirs.working = *argv; } break; case 'n': do_echo = 1; break; case 's': save = 0; break; case 'v': verbose = 1; break; case 'e': excludes = 1; break; case 'r': { --argc,++argv; if (argc == 0) { usage(); exit(-1); } forced_revision_number = *argv; } break; case 't': { --argc,++argv; if (argc == 0) { usage(); exit(-1); } forced_revision_date = *argv; } break; case 'h': usage(); exit(0); case '\0': goto done; default: fprintf(stderr, "Option %s unknown.\n", *argv); usage(); exit(-1); } } done: ; dirs.initialize(); File statusfile(dirs.baseline, dirs.subdir->path, ".file_status"); readBaseFileStatus(statusfile.path); if (excludes) { // process all files, excluding listed files stringNode* node; for(; argc>=1; --argc,++argv) { if (node = table.lookup(*argv)) { node->mark(); } } processAllFilesInDir(); scanTable(); } else if (argc > 0) { // process only listed files for (; argc>=1; --argc,++argv) { processFileArgument(*argv); } } else { // normal case; process all files processAllFilesInDir(); scanTable(); } exit(0); }