У меня есть приложение, где мне нужно написать новую функцию getpid для замены оригинальной ОС. Реализация будет выглядеть следующим образом:Замена getpid моей собственной реализацией
pid_t getpid(void)
{
if (gi_PID != -1)
{
return gi_PID;
}
else
{
// OS level getpid() function
}
}
Как я могу назвать реализацию оригинальной GETPID() ОС с помощью этой функции?
EDIT: Я пробовал:
pid_t getpid(void)
{
if (gi_PID != -1)
{
return gi_PID;
}
else
{
return _getpid();
}
}
Джонатан предложил. Это дало мне следующие ошибки при компиляции с г ++:
In function
pid_t getpid()': SerendibPlugin.cpp:882: error:
_getpid' undeclared (first use this function) SerendibPlugin.cpp:882: error: (Each undeclared identifier is reported only once for each function it appears in.)
EDIT 2: Мне удалось получить эту работу, используя указатель на функцию и установить его на следующий второй символ с идентификатором «GETPID», используя dlsym (RTLD_NEXT, «getpid»).
Вот мой пример кода:
vi xx.c
"xx.c" 23 lines, 425 characters
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <iostream>
#include <dlfcn.h>
using namespace std;
pid_t(*___getpid)();
pid_t getpid(void)
{
cout << "My getpid" << endl;
cout << "PID :" << (*___getpid)() << endl;
return (*___getpid)();
}
int main(void)
{
___getpid = (pid_t(*)())dlsym(RTLD_NEXT, "getpid");
pid_t p1 = getpid();
printf("%d \n", (int)p1);
return(0);
}
г ++ xx.c -o XOUT
My getpid
PID :7802
7802
Вы хотите переопределить эту функцию для любого другого приложения, которое ее вызывает? Для любви к Богу, почему? –
Последняя. Мне хотелось бы сделать это по-другому, но нет. – Gayan