Hmm kemi, nem biztos, hogy az a legoptimálisabb, ha külső parancsokat hívsz meg rá, mert pl. mi van, ha nincs ps vagy grep (vagy akár tasklist, ha winfos)? Én inkább a /proc mappa túrását javallanám (legalábbis Unix alatt), gyorsabb is (nem kell a háttértárhoz nyúlni többször is), meg biztosabb is.#include <dirent.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
long int get_pid_by_process_name(char *pname)
{
DIR *d;
struct dirent *dir;
FILE *f;
char entry[24];
char buf[256];
long int l;
d = opendir("/proc");
if (d)
{
while ((dir = readdir(d)) != NULL)
{
strcpy(entry, "/proc/");
strcat(entry, dir->d_name);
strcat(entry, "/cmdline");
f = fopen(entry, "rb");
if (f != NULL)
{
fread(&buf[0], 1, 256, f);
fclose(f);
l = -1;
while ((++l < 257) && (buf[l]) && (buf[l] != 32));
buf[l] -= (buf[l] == 32) << 5;
if (l)
{
while ((buf[--l] != 47) && l);
l += (buf[l] == 47);
if (!strcmp(pname, &buf[l]))
{
return atol(dir->d_name);
}
}
}
}
return -1; /* nincs ilyen */
closedir(d);
}
return -2; /* nem lehet megnyitni a /proc-ot */
}
@kemi:Ha meg olyasmit akarsz kiíratni a couttal, amit nem tud (jelen esetben egy QStringet), akkor egy ilyen függvényt kell írni: ostream& operator<<(ostream& os, QString s)
{
os << s.toStdString();
return os;
} Ööö...ezt miért kell így? Úgy nem lehet, hogy cout << s.toStdString()?
Egyébként ez nem függvény, hanem operator overload. |